zoukankan      html  css  js  c++  java
  • 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类型
  • 相关阅读:
    IDEA 远程调试springboot
    Mybatitas-plus实现逻辑删除
    java通过poi导出excel
    js 展示当前时间
    Linux环境下服务自启
    Spring自带定时器@Scheduled
    Quartz任务调度框架相关方法、参数理解
    Quartz 实现定时任务
    mysql 使用union(all) + order by 导致排序失效
    mongodb的查询操作
  • 原文地址:https://www.cnblogs.com/zhiyu07/p/14175446.html
Copyright © 2011-2022 走看看