1安装类
2代码类
2.1 架包引入
(1)参照 Appium环境搭建
2.2 启动篇
private AndroidDriver<AndroidElement> driver;
@Before
public void setUjp() throws Exception {
// set up appium
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "Android Emulator");
capabilities.setCapability("platformVersion", "4.4");
capabilities.setCapability("appPackage", "com.example.android.apis");
capabilities.setCapability("appActivity", "com.example.android.apis.ApiDemos");
try {
driver = new AndroidDriver<>(new URL("http://127.0.0.1:7922/wd/hub"), capabilities);
} catch (Exception ex) {
System.out.println(ex.getMessage());
throw ex;
}
}
(1)定义driver对象需要使用AndroidDriver而不能是AppiumDriver,原因是AndroidDriver附加有一些特殊方法,用例里面需要使用,例如pressKeyCode
(2)appPackage参数和appActivity参数是可以在系统里面唯一定位app启动页面,可以不用使用app参数
(3)URL是指的服务端
2.3 API篇
(1)element.getCenter() 获取控件中心点坐标
(2)element.getLocation() 获取控件起始坐标(左上角坐标)
(3)element.getSize() 计算出控件大小。值 = 终点坐标X-起点坐标X,终点坐标Y-起点坐标Y
(4)driver.swipe(startx, starty, endx, endy, duration) 滑动(起点X坐标,起点Y坐标,目的X坐标,目的Y坐标,滑动时间)
(5)driver.pressKeyCode(key) 模拟手机按键(比如返回键得KYE值就是4)
(6)driver.longPressKeyCode(key) 模拟手机长时间按键(比如长按home键)
(7) driver.scrollTo("name") 翻页找到list里面值为name的控件
(8)driver.tap(fingers, x, y, duration) 敲击(x,y)点,duration*5毫秒后松开,如此重复fingers次。
(例如点击一次20,20:tap(1, 20, 20, 0))
(9)TouchAction 手势
touch.tap(x, y).waitAction().press(x, y).longPress(element).waitAction(1000).moveTo(x, y).release().perform();
touch.tap(x, y).waitAction().press(x, y).longPress(element).waitAction(1000).moveTo(x, y).release().cancel();
tap 敲击
waitAciton 等待一段时间
press(x,y) 按下手指
longpress(x,y) 长按
moveTo(x,y) 移动
release() 抬起手指
cancel() 取消本次手势串
perform() 发送本次手势串请求
tap就是press+release+perform
(10)元素查找
//弹出单选框
//appium自带方法定位,先用classname定位到一组元素,再到包含自己控件的元素里面 用classname定位到自己的控件
List<AndroidElement> text = driver.findElementsByClassName("android.widget.TableRow");
text.get(7).findElementByClassName("android.widget.TextView").click();
2.4 等待页面打开
<span style="font-size:14px;"> WebDriverWait wait = new WebDriverWait(driver, 60);
AndroidElement e = wait.until(new ExpectedCondition<AndroidElement>() {
@Override
public AndroidElement apply(WebDriver arg0) {
// TODO Auto-generated method stub
AndroidElement ae = driver.findElementById("com.duguang.baseanimation:id/tv_hint");
if (ae.getText().equals("上滑可以进入首页"))
return ae;
else
return null;
}
});</span>
3 APPium的机制
客户端将我们的各种指令通过http请求发送到服务端APPIUM,appium再将指令解析出来,调用对应的手机接口,完成各种操作。