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类型
原文地址:https://www.cnblogs.com/zhiyu07/p/14175446.html