zoukankan      html  css  js  c++  java
  • 移动端自动化测试 -- appium 之Desired Capabilities与 定位控件

    一、Desired Capabilities

    Desired Capabilities 在启动 session 的时候是必须提供的。

    Desired Capabilities 本质上是以 key value 字典的方式存放,客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。它告诉 appium Server这样一些事情:

    • 本次测试是启动浏览器还是启动移动设备。

    • 是启动Andorid还是启动iOS。

    • 启动Android时,app的package是什么。

    • 启动Android时,app的activity是什么。

    固定写法参考如下:

    desired_caps = {}
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '4.4.2'
    desired_caps['deviceName'] = '127.0.0.1:62001'
    desired_caps['appPackage'] = 'com.tencent.mobileqq'
    desired_caps['appActivity'] = 'com.tencent.mobileqq.activity.SplashActivity' # android 独有
    desired_caps["unicodeKeyboard"] = "True"
    desired_caps["resetKeyboard"] = "True"
    desired_caps["noReset"] = "True"
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

    • deviceName:启动哪种设备,是真机还是模拟器?iPhone Simulator,iPad Simulator,iPhone Retina 4-inch,Android Emulator,Galaxy S4…

    • automationName:使用哪种自动化引擎。appium(默认)还是Selendroid。

    • platformName:使用哪种移动平台。iOS, Android, orFirefoxOS。

    • platformVersion:指定平台的系统版本。例如指的Android平台,版本为5.1。

    • appActivity:待测试的app的Activity名字。比如MainActivity、.Settings。注意,原生app的话要在activity前加个”.“。

    • appPackage:待测试的app的Java package。比如com.example.android.myApp, com.android.settings。

    • noReset:Don't reset app state before this session
    • resetKeyboard:Reset keyboard to its original state, after running Unicode tests with unicodeKeyboard capability. Ignored if used alone. Default false
    • unicodeKeyboard:Enable Unicode input, default false
    • /127.0.0.1:4723 : appium-server 地址

    更多的参数配置:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

    知识拓展:定位appPackage与appActivity 方法

    SDK中下载最新的build-tools,通过aapt dump badging xxx.apk命令来查appPackage与appActivity。

    CMD下输入adb logcat | findstr /i Start,强制停止被测试软件,再次打开,观察logcat。(手动打开需要操作的appPackage ,从logcat 最下面开始找)

    二、定位控件

    appium 通过 uiautomatorviewer.bat 工具来查看控件的属性。该工具位于 Android SDK 的 /tools/bin/ 目录下。

    1、id 定位

    driver.find_element_by_id('resource-id')

    # ID定位于selenium不同,可能存在重复的问题。

    # appium-desktop抓取元素时如果出现有id,则可以直接用。

    # resource-id可能出现重复,需要具体看下有多少个。
    2、class name 定位
    driver.find_element_by_class_name('class')
    # 对应class字段,有可能存在多个相同class。
    # 多个相同class,每次获取只取第一个遇到的元素。
    3、xpath 定位
    driver.find_element_by_xpath('//android.widget.EditText[@text="手机号"]')
    # Xpath路径定位,与Web的Xpath定位在有一点点区别
    # Native App的定位以class为基准,主要用到参数有text、resource-id、index
    4、Accessibility ID定位 --这个方法属于Appium扩展的定位方法
    driver.find_element_by_accessibility_id('content-desc')
    # Android对应content-desc IOS对应accessibility identifier
    # content-desc是给残障人士定义的特殊字段
    5、android uiautomator定位 --这个方法属于Appium扩展的定位方法
    Android的源生测试框架的定位方式,定位速度快
    driver.find_element_by_android_uiautomator('new UiSelector().text("手机号")')
    # 匹配全部text文字
    driver.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')
     
    # className
    6、iOSPredicateString 
    仅支持iOS10以上,可以多个属性同时定位,推荐。(替代XPATH)
    driver.find_elements_by_ios_predicate("label == '登录'")
  • 相关阅读:
    Redis中的批量删除数据库中的Key
    Solr中初学Demo
    Solr中Schema.xml中文版
    Eclipse中web项目的默认发布路径改为外部Tomcat中webapp路径
    Java操作XML的工具类
    Java中创建操作文件和文件夹的工具类
    Java中的操作日期的工具类
    Java POI操作Excle工具类
    【转】怎样写一个解释器
    【转】什么是语义学
  • 原文地址:https://www.cnblogs.com/chendai21/p/9045570.html
Copyright © 2011-2022 走看看