zoukankan      html  css  js  c++  java
  • appium自动化测试元素定位工具

    Appium工作原理

     

    脚本请求 ——> 4723端口appium server ——> 解析参数给PC端4724端
    口 ——> 发送给设备4724端口 ——> 通过设备4724端口发给bootstrap.jar —
    —> Bootstrap.jar把命令发给uiautomator

    Json Wire Protocol:
    它是一种协议,遵循REST风格,以JSON方法进行传输,是一系列的键值对,
    遵循W3C WebDriver Spec设计风格;appium中的Json wire protocol继承自
    selenium的webdriver wire protocol,并进行了扩展,使得Json wire protocol能
    够控制不同的移动设备的行为。
    bootstrap:
    bootstrap在appium中是以jar包的形式存在的,它的功能是作为一个socket
    服务,把Appium sever 发送的请求转化成uiautomator的命令来让uiautomator进
    行处理。
    在创建session成功之前,appium就已将bootstrap.jar放入手机中,并开启
    设备上的基于appium bootstrap的socket服务,绑定本机和boostrap通信的端口
    号4724用于和Android设备通讯,默认监听4724端口,等待client的连接。

    Uiautomator:
    UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于
    Accessibility服务。功能很强,可以对第三方App进行测试。它的初始版本发布
    在Android 4.3 (API level 18)及以上的android系统版本
    Selendroid:
    Selendroid和UiAutomator类似,也是Google提供的一个安卓自动化测试软
    件,适用于Android系统的本地应用程序和移动web的UI混合测试。它主要应用
    在 Android 4.2 (API level 17) 及以下的android系统版本
    Instruments:
    Instruments 一个很灵活的、强大的工具,是性能分析、动态跟踪 和分析
    OS X以及iOS代码的测试工具,appium ios封装了apple的 Instruments框架,主
    要使用Instruments里的UI Automation(Apple的自动化测试框架),然后在设
    备中注⼊入bootstrap.js进⾏行监听。

    Desired Capabilities:
    Desired Capabilities携带了一些配置信息。从本质上讲,它是key-value形
    式的对象。可以理解成是java里的map,python里的字典,ruby里的hash以及js
    里的json对象。实际上Desired Capabilities在传输时就是json对象。
    Desired Capabilities最重要的作用是告诉appium server本次测试的上下文。
    比如:
    本次测试是启动浏览器还是启动移动设备?
    是启动andorid还是启动ios?
    启动android时,app的package是什么?
    启动android时,app的activity是什么?
    ....
    appium server的这些疑问Desired Capabilities都必须给予解答,否则appium
    server就无法完成移动app或者是浏览器的启动。

    Desired Capabilities常用键值对介绍:
    automationName:使用哪种自动化引擎。appium(默认)还是Selendroid。
    platformName: 平台的名称,iOS, Android, or FirefoxOS
    platformVersion:移动设备的系统版本号,7.1, 4.4
    deviceName: 设备名称,Android:可随意填写; IOS:instruments -s devices
    udid:连接的物理设备的唯一设备标识 adb devices 可获取
    app:本地绝对路径_或_远程 http URL 所指向的一个安装包(.ipa,.apk,或 .zip
    文件)。Appium 将其安装到合适的设备上。如果指定了 appPackage 和
    appActivity 参数,Android 则不需要此参数了。该参数也与 browserName 不兼
    容。
    browserName:测试的web浏览器,如果是测app则忽略
    newCommandTimeout :用于客户端在退出或者结束 session 之前,Appium 等
    待客户端发送一条新命令所花费的时间(秒为单位)
    noReset:在当前session前不重置app状态,默认值为 false
    fullReset:(iOS)删除所有的模拟器文件夹。(Android) 要清除 app 里的数据,请
    将应用卸载才能达到重置应用的效果。在 Android, 在 session 完成之后也会将
    应用卸载掉。默认值为 false

    Desired Capabilities android特有键值对介绍:
    appPackage:运行的 Android 应用的包名
    appActivity:Activity 的名字是指从你的包中所要启动的 Android acticity。通常
    需要再前面添加‘.’
    unicodeKeyboard:使用 Unicode 输入法。 默认值为 false
    resetKeyboard:在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重
    置输入法到原有状态。如果单独使用,将会被忽略。默认值为 false
    noSign:跳过检查和对应用进行 debug 签名的步骤。仅适用于 UiAutomator,
    不适用于 selendroid。 默认值为 false
    最全:
    https://github.com/appium/appium/blob/master/docs/cn/writing-runningappium/
    caps.md

    Desired Capabilities 使用实例:
    1、定义一个Desired Capabilities配置的字典
    des = {
    'platformName': 'Android',
    'platformVersion': '9.0',
    'deviceName': 'Samsung Galaxy S9',
    'appPackage': 'com.ibox.calculators', #包名
    'appActivity': '.CalculatorActivity', #app入口
    'udid': '192.168.56.101:5555', # genymotion设备
    'noReset': True,
    'unicodeKeyboard': True,
    'resetKeyboard': True,
    }
    2、把配置的字典作为请求参数发送给appium服务器
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', des)

    uiautomatorviewer定位工具:

    元素定位主要用来获取元素信息,获取元素信息后才能用appium提供的相
    关API去识别和操作元素。

    使用步骤:
    1、在虚拟机或真机上打开要识别的app
    2、在命令窗口输入 uiautomatorviewer 命令
    3、然后点击Device Screenshot按钮连接手机

     Appium Inspector定位工具:

    打开Appium-Desktop之后,启动Appium服务,单击该页面右上角的第一个
    “Start Inspector Session”按钮,如下:

     就会启动一个新的会话窗口。如下图:

     连接成后,跳转至设备页面,即可进行元素定位,如图:

     

    Appium Inspector定位工具界面介绍:

    Selecte Elements :根据元素定位
    Swipe By Coordinates:根据坐标滑动页面
    Tap By Coordinates:根据坐标点击操作
    Back:返回
    Refresh Source & Screenshot:刷新界面与截图
    Start Recording:录制按钮,能自动生成自动化脚本
    Search for element:在App Source中搜索元素
    Copy XML Source to Clipboard :复制XML源代码到
    Quit Session & Close Inspector:退出会话或结束
    Source:源代码显示区域
    Actions:
    Selected Element:被选中元素信息显示

     Appium Inspector 录制功能:

  • 相关阅读:
    collections.ChainMap类合并字典或映射
    collections.namedtuple()命名序列元素
    过滤、修改和替换列表数据
    快速排序
    itertools.groupby()分组字典列表
    operator.attrgetter() 进行对象排序
    operator.itemgetter() 字典列表排序
    collections.Counter类统计列表元素出现次数
    递归
    正则表达式的一些题
  • 原文地址:https://www.cnblogs.com/joy-field/p/13434042.html
Copyright © 2011-2022 走看看