目前appium-java最新版本是5.0.0-BETA3,因此就拿最新的说明,以Java为例,首先引入java client的依赖:
<dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>5.0.0-BETA3</version>
        </dependency>

附java-client版本演进文档

API主要分为两类,分别是元素定位类和模拟操作类。
元素定位类findElementByXX
  • driver.findElementById(“id”);
    id获取方法:利用uiautomater截屏,获取resource id;
  • driver.findElementByClassName(“className”);
    通常通过这种方式获取的view不止一个,需要遍历一遍得到的 views,然后根据条件匹配需要的view。
  • driver.findElementByName(“text”);
    name获取方法:利用uiautomater截屏,获取text;
  • driver.findElementsByLinkText (“text”);
    针对webview上元素的超链接
  • driver.findElementByXPath(“//*[@name=’62’]”);
    举例,我要定位下图页面中的这个元素,我采用xpath定位时,可以这样写:
WebElement webElement = driver.findElementByXPath("//android.widget.TextView[contains(@text,'商品描述')]");
    webElement.click();

java用appium用的war包_java用appium用的war包

查找多元素时,直接用相应的findElementsByXX即可。

模拟操作类
  • driver.runAppInBackground(5); //将当前活跃的应用放在后台运行
  • driver.hideKeyboard(); //隐藏键盘
  • driver.lockDevice(); //锁屏
  • driver.openNotifications(); //打开Android的下拉通知栏
  • driver.isAppInstalled(“com.example.android.apis”) //判断应用是否安装
  • driver.installApp(“path/to/my.apk”) //安装应用
  • driver.removeApp(“com.example.android.apis”) //卸载应用
  • driver.closeApp() //关闭App
  • driver.getContextHandles() //可用上下文,context可以理解为可进入的窗口,如果是native则为native_app,如果是webview为对应webview;
  • driver.context(); //设置上下文 (context),对hybrid app会用到
  • driver.getAppStringMap(); //获取应用的字符串
  • driver.pressKeyCode(AndroidKeyCode.HOME); //给设备发送一个按键事件,所有键盘按键值可参考AndroidKeyCode类
  • driver.pullFile(“Library/AddressBook/AddressBook.sqlitedb”); //从设备中拉出文件
  • driver.pullFolder(“Library/AddressBook”); //从设备中拉出文件夹
  • driver.PushFile(“/data/local/tmp/file.txt”, “some data for the file”); //推送文件到设备中去
  • driver.swipe(75, 500, 75, 0, 0.8) //模拟用户滑动
  • driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1)); //设置等待时间
  • driver.navigate().forward(); // 前进
  • driver.navigate().back(); // 后退
  • driver.navigate().refresh(); // 刷新
  • driver.currentActivity(); //当前activity,可用于断言跳转是否正确
  • driver.startActivity(appPackage,appActivity); //启动其他app的activity
  • 坐标操作,降低适配带来的不适用:
    double Screen_X = driver.Manage().Window.Size.Width;//获取手机屏幕宽度
    double Screen_Y = driver.Manage().Window.Size.Height;//获取手机屏幕高度
    double startX = element.Location.X; //获取元素的起点坐标,即元素最左上角点的横坐标
    double startY = element.Location.Y; //获取元素的起点坐标,即元素最左上角点的纵坐标
    double elementWidth = element.Size.Width; //获取元素的宽度
    double elementHight = element.Size.Height; //获取元素的宽度

我对照着看了appium-client的官方文档,然后对着demo演示,发现一些个别API都找不到,查了下资料才发现,问题出现在:

public static AppiumDriver driver;

如果改成这样就ok了:

public static AndroidDriver driver;

这里要说下AppiumDriver和AndroiDriver的关系,AndroidDriver已经继承了AppiumDriver,在AppiumDriver基础上再封装一些基本功能。而AppiumDrvier是原生webdriver的子类,所以一些webdriver的方法都是适用的。

因此我推荐适用实例化AndroiDriver对象。