• ATX 学习 (二)-Atx Weditor


    1、Atx的安装

    安装adb
    使用以下命令安装atx最新版
    pip install --pre -U uiautomator2 
    手机接到电脑上之后,需要先运行一下命令:
    python -m uiautomator2 init将需要的程序部署到手机上(一次即可)

    2、Atx Weditor

    ATX Weditor是一个python库,命令行安装 
    pip install --pre weditor , 命令行启动python -m weditor(PS: windows可以双击weditor快捷方式),会自动打开一个网页,用网页作为其Inspector

    3.连接设备

    appium需要构造一个desiredCapabilities,其中的udid字段通常对应设备的序列号。
    以一个常见的配置文件为例

    desired_caps = {
    # 平台 android
    'platformName': 'Android',
    # 手机设备名称
    'deviceName': '2d869e6',
    # android系统的版本号
    'platformVersion': '9',
    # 安装包路径
    # 'app': 'F:downloadXXX.apk',
    # apk包名
    'appPackage': 'com.tencent.mm',
    # apk的launcherActivity
    'appActivity': '.ui.LauncherUI',
    # 默认neReset为false,不要在会话前重置应用状态,每次启动都跟第一次启动一样,变为true则不一样
    # 会话前不重置应用状态 默认是false
    'noReset': True,
    # 'appWaitActivity':'com.tencent.mm.plugin.webview.ui.tools.WebViewUI',
    # 下面两行代码是为了屏蔽软件盘以至于可以输入中文
    'unicodeKeyboard': True, # 使用unicode编码方式发送字符串
    # 'resetKeyboard': False, # 将键盘隐藏起来
    # 在 Android 上,这也会在会话结束后自动清除被测应用
    "fullReset": False,
    'chromeOptions': {'androidProcess': 'com.tencent.mm.plugin.webview.ui.tools.WebViewUI'}
    # "automationName": "uiautomator2"
    # newCommandTimeout设置为更大的值
    # "newCommandTimeout":240
    }

    atx是没有这类配置文件,必需的字段只有一个就是设备的序列号,这里用ip地址也可以。其他的都是可选的。对于是否启动应用给用户提供了的选择权。
    atx代码为:

    import uiautomator2 as u2
    d = u2.connect("dgsdg")
    d.set_fastinput_ime(True)
    s = d.session("com.netease.cloudmusic")

    感觉方便多了,fastinput_ime是专门为自动化定制的输入法,支持中文的输入,和一些特殊的指令如搜索,清空。
    d.session函数对应于appium的session机制,每次运行相关代码的时候都会先检测一下应用是否存活。

    注:atx连接的时候可以填手机的序列号或者ip地址。因为测试代码最终是与手机上的一个服务的atx-agent通信,所以也支持填写IP,但是需要运行代码的电脑跟手机在同一个网段。

    4、控件的选择与操作

    appium常用定位元素的方法为find_element_by_xpath, find_element_by_id, find_element_by_text
    一种常见的写法为

    driver.implicitly_wait(10) # 设置元素的查找时间10s
    element = driver.find_element_by_text("Settings")
    if element:
    element.click()
    转化成atx代码为
    
    d(text="Settings").click(timeout=10)
    atx不推荐用xpath,因为要dump所有的hierarchy,速度比较慢。推荐用的时候各种查询条件混合一起使用。
    典型的用法为
    
    d(className="android.widget.Button", textContains="登录").click()
    # using xpath
    d.xpath('//android.widget.Button[contains(@text, "登录")]').click()

    5、弹框的处理

    现在高版本的手机基本都会有一些权限确认窗口或者安装确认框。如果处理不好会非常影响自动化。

    看到一个帖子说是可以配置一下就可以解决弹框了(PS:应该是只针对iOS的) https://testerhome.com/topics/14513

    driver.switch_to.alert.accept()
    atx的方法更自由一点,你可以自由选择处理什么内容的弹窗,以及怎么处理。一个常见的自动点击安装按钮的方法
    
    d.watcher("INSTALL").when(text="安装").click()
    d.watcher("NEXT").when(text="下一步").click()
    d.watchers.watched = True

    官方文档:https://github.com/openatx/uiautomator2
    参考资料:https://testerhome.com/topics/14880

  • 相关阅读:
    OpenCV鼠标事件
    相对复杂一些的爬虫,针对拒绝爬虫的网站
    CSS
    JS
    JS
    JS
    JS
    TypeScript
    微信小程序
    微信小程序
  • 原文地址:https://www.cnblogs.com/dangkai/p/10938464.html
Copyright © 2020-2023  润新知