APP自动化之WebElement元素操作Api&androidDriver操作Api(三)
元素操作Api
- click()触发当前元素的点击事件
- sendKeys(...)输入数据
- clear()清空内容
- getAttribute()
- getText()
getAttribute字符串类型属性:
- name(返回 content-desc 或 text)
- text(返回 text)
- className(返回 class)
- resourceId(返回 resource-id)
布尔类型属性同UiautomatorViewer里面保持一致
实例:getAttribute 获取元素对应的属性--参数属性名
WebElement webElement = driver.findElement(MobileBy.id("com.apple.apple2:id/navigation_shoping"));
System.out.println("class属性:"+webElement.getAttribute("className"));
System.out.println("content-desc属性1:"+webElement.getAttribute("content-desc"));
name属性 --》真正获取的属性值(text属性)
System.out.println("content-desc属性2:"+webElement.getAttribute("name"));
System.out.println("resource-id属性:"+webElement.getAttribute("resourceId"));*/
getText()
获取当前元素的文本值
实例:getText 获取元素文本
特别注意:App元素text是一个属性
WebElement webElement = driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text(\"购物车\")"));
System.out.println("获取购物车元素的文本:"+webElement.getText());
androidDriver操作Api
currentActivity()
当前正在前台运行的界面名,我们可以用此API在某些场景进行断言:是否当前activity符合我们的预期 等。
- 得到当前正在运行的activity
- String activity = androidDriver.currentActivity();
- System.out.println(activity);
实例:currentActivity 获取当前页面的名字
adb shell dumpsys activity | find "mFocusedActivity"
System.out.println("当前页面的名字:"+driver.currentActivity());
getPageSource()
可以用于判断当前页面是否有某个元素,或者判断当前页面有没有产生变化:如上下滚动判断是否已经 到了底端/顶端
得到当前页面的结构图
实例:getPageSource 获取页面的源代码
System.out.println(driver.getPageSource());
其他信息获取类API
获取设备时间信息
System.out.println(driver.getDeviceTime());
获取设备DPI,注意不是分辨率
System.out.println(driver.getDisplayDensity());
获取automation name,默认为null,如果有指定automation name为uiautomator2就为对应的值
System.out.println(driver.getAutomationName());
获取设备横竖屏状态,有PORTRAIT(竖屏)与LANDSCAPE(横屏)
System.out.println(driver.getOrientation());*/
pressKey()
按键事件-返回键
KeyEvent keyEvent = new KeyEvent();
往keyEvent里面设置键值
keyEvent.withKey(AndroidKey.BACK);
driver.pressKey(keyEvent);
返回键没有效果的原因:模拟器的问题
按键事件-音量+
KeyEvent keyEvent2 = new KeyEvent();
往keyEvent里面设置键值
keyEvent2.withKey(AndroidKey.VOLUME_UP);
driver.pressKey(keyEvent2);
getScreenshotAs()
截图getScreenshotAs
OutputType.FILE -->指定截图方法返回类型file文件对象
File srcFile = driver.getScreenshotAs(OutputType.FILE);
把file保存到本地,本地一张图片
File dstFile = new File("D:\\test\\screenshot.png");
把生成的截图file对象拷贝到本地文件对象中
try {
FileUtils.copyFile(srcFile,dstFile);
} catch (IOException e) {
e.printStackTrace();
}
选择设置中关于手机->连续点击五次版本号->进入开发者选项->指针位置进行勾选
坐标点击 -- TouchAction(触摸对象)
TouchAction touchAction = new TouchAction(driver);
PointOption类型对原始的坐标进行了封装(x,y)
PointOption pointOption = PointOption.point(448,1543);
press:按下了手指 release:释放手指/抬起
perform:让点击动作生效
touchAction.press(pointOption).release().perform();
注意:坐标点击受设备屏幕尺寸/分辨率/DPI影响,万不得已不要使用此种方式
总结
- 元素API使用,click、sendKeys、clear、getAttribute、getText
- driver的API使用,currentActivity、getPageSource、getDeviceTime、getAutomationName、 getOrientation、getDisplayDensity、pressKey、getScreenshotAs
- 坐标点击 TouchAction->press->release->perform ,坐标的转换,原始坐标转换成PointOption类型