一、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 == '登录'")

移动端自动化测试 -- appium 之Desired Capabilities与 定位控件的更多相关文章

  1. Appium教程——Desired Capabilities 详解(转自TesterHome)

    Desired Capabilities在启动session的时候是必须提供的. Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情 ...

  2. 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝

    移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌)  说到APP自动化测试,Appium可是说是非常流 ...

  3. 移动端自动化测试appium 从入门到项目实战Python版✍✍✍

    移动端自动化测试appium 从入门到项目实战Python版 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程 ...

  4. 移动端自动化测试Appium 从入门到项目实战Python版

    移动端自动化测试Appium 从入门到项目实战Python版  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...

  5. appium简明教程(10)——控件定位基础

    狭义上讲,UI级的自动化测试就是让机器代替人去点来点去的过程. 但机器去点什么(点上面还是点左边),怎么点(是长按还是轻触),这些东西是必须由代码的编写者所指示清楚的. 控件定位就是解决机器点什么的问 ...

  6. MonkenRunner通过HierarchyViewer定位控件的方法和建议(Appium/UIAutomator/Robotium姊妹篇)

    1. 背景 在使用MonkeyRunner的时候我们经常会用到Chimchat下面的HierarchyViewer模块来获取目标控件的一些信息来辅助我们测试,但在MonkeyRunner的官网上是没有 ...

  7. 移动端自动化测试Appium环境搭建(part1-2-3)

    Appium移动端自动化测试相信大家都不陌生,appium的铁哥们是selenium,不管是selenium还是appium,都是调用webdriver来做自动化测试.今天关于appium的介绍我们不 ...

  8. 3.移动端自动化测试-appium环境搭建(原理)

    appium自动化原理: 需要服务端(appium启动),手机端(adb连接设备),脚本端(pycharm)就可以进行 自己总结下: 手机和脚本连接:1.adb连接,2靠脚本导入驱动. 脚本和服务端连 ...

  9. Appium移动自动化测试-----(八)定位控件

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

随机推荐

  1. 每日一句英语:怎样回答美国人的How is it going问候语?

    和中国人"吃了吗"是一个性质,本质上仅仅是个话题的起始点,而不是真的想知道你吃了没有. 美国人打招呼有几种方式: 不太熟的人:How are you? 一 般说 pretty go ...

  2. Asp.Net MVC:return View()、return View("Login")、return Login()、return RedirectToAction("Login") 的区别

    在做登录页面的时候发现的一些情况: ------------------------------------------------------------------------- public A ...

  3. MISRA-C 2012 C90规范和C99规范对比

  4. eclipse 创建mavenWeb项目

      eclipse 创建mavenWeb项目 CreationTime--2018年6月7日18点46分 Author:Marydon 一.创建MavenWeb项目 1.右键-->New--&g ...

  5. 升级openssh基于openssl

    OpenSSH is the premier connectivity tool for remote login with the SSH protocol. It encrypts all tra ...

  6. Android Listview 隐藏滚动条

    在<ListView>标签中设置属性. android:fastScrollEnabled="false" 以下属性scrollbars可以设置为none也可以不设置为 ...

  7. nginx中的502错误

    遇到这种情况,首先看一下慢日志 [17-Aug-2015 13:13:43] WARNING: [pool www] child 27780, script '/data/s.com/index.ph ...

  8. url-pattern / /*匹配

    http://hi.baidu.com/atell/item/522112d3db45081fd90e44e1 struts2中配置为 <url-pattern>/*</url-pa ...

  9. jquery添加用户 事例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  10. cxf之org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cxf' available

    原因是.... 把cxf的配置文件spring-cxf-rest.xml配置结束后,没有import到spring.xml中...所以才加载不到bean.... 另附:异常org.springfram ...