-
概述
UI自动化,当然包括appium,主要就是干三种事情:
1选择 界面 元素
2操作元素(包括输入操作:点击、输入字符、拖拽等。输出操作:获取页面元素的各种属性)
3根据Appium获取的数据进行分析和处理。 -
查看appPackage 和 appActivity
方法一:
mac
/usr/local/android-sdk-macosx/build-tools/29.0.3/aapt dump badging /Users/wgz/Desktop/头条app/toutiao.apk
#包名
package: name='io.manong.developerdaily'
#入口名
name='io.toutiao.android.ui.activity.LaunchActivity'
win
e:\androidsdk\build-tools\28.0.2\aapt.exe dump badging d:\apk\toutiao.apk
方法二:
如果被测app已经安装在手机上了,可以直接打开手机上该应用,进入到你要操作的界面然后执行:
adb shell dumpsys activity recents
会出现N个activity信息,最近的就是我们想要的
例:
com=com.anfroid.mms/.ui.ConversationList
- Appium自动化和Selenium自动化都是界面的自动化操作,所以其原理和操作方式非常相似。
1⃣️resourse-id:是该元素的资源id,一般来说唯一的决定了一个元素,有点像web的ID,优先根据他查找。
但是并非每一个元素都会有。如果这样,就需要其他的方法选择
2⃣️class:就是该元素的类型,这是安卓界面元素对应的代码里的java类,类似html的tag名,比如layout,textview。
3⃣️package:就是所在app的包名
4⃣️content-desc:这个属性用来描述该元素的用途,特性等
5⃣️bounds:就是这个元素在界面上的位置,左上角和右下角的坐标。
以后如果我们死在找不到元素的时候,就根据这个属性直接去根据坐标操作元素了。
准备自动化配置信息:
desired_caps = {
#移动设备平台
"platformName":"Android",
#平台版本号,写整数位即可
"plathformVerSion":"8",
#设备的名称--值可以随便写
"deviceName":"test0106",
#提供被测app的信息-包名,入口信息
"appPackage":"xxx",
"appActivity":"xxx",
#确保自动化之后不重制app
"noReset":True,
#设置session的超时时间,单位秒
"newCommandTimeout":6000
}
- 这一行代码发生了什么?
webdriver.Remote('http://localhost:4723/wb/hub',desired_caps)
1.客户端代码于appiumserver建立连接,并传递caps配置信息
2.Appiumserver检查配置信息是否符合要求
3.利用adb工具检查当前连接的移动设备
4.安装appium-settings与uiautomator2到被测手机(首次运行脚本发生)
5.手机启动aappium-settings作为监听服务,用于和appium-server进行通信
6.uiaotumator2启动被测app
- 选择元素
选择元素的代码也和Selenium基本相同,如下
可以通过
find_element_by_xxx 符合条件的第一个元素,找不到抛出异常
find_elements_by_xxx 符合条件的所有元素列表,找不到返回空列表
通过webdriver对象调用这样的方法,查找范围是整个界面的树形结构。
通过webelement对象调用这样的方法,查找范围是该节点的子节点
选择元素方式
-
id 例:
ele = driver.find_elelment_by_id('com.example.jcy.wvtest:id/name1')
ele.send_keys('hello word')
但是我们只靠id定位也是远远不够的。
有的元素没有ID,而且有的时候ID也并非唯一 -
class name
class树形决定了界面的元素类型。
通常class就是类似web里面的tagname,所以通常不是唯一的,所以大部分情况,我们根据classname是要选择多个而不是一个。
如果确定,我们要查找的是某种类型的界面元素,而且这种类型的界面元素在当前界面中只有一个,就可以根据他来查找。
写法是:
driver.find_element_by_class_name('android.widget.DatePicker') -
accessibility id
content-desc树形是用来描述该元素的作用
要查询的界面元素content-desc树形在当前界面中唯一我们可以通过他来定位,
写法:
driver.find_element_by_accessibility_id('xxx')
- 元素定位工具补充:Appium的inspector
该工具可以像浏览器一样在上面验证xpath表达式。
需要我们手动创建一个session,其实就是一个客户端,和appium server连接
填入参数,就像代码汇总的,手动填写下面参数,一一对应。
desired_caps = {
#移动设备平台
"platformName":"Android",
#平台版本号,写整数位即可
"plathformVerSion":"8",
#设备的名称--值可以随便写
"deviceName":"test0106",
#提供被测app的信息-包名,入口信息
"appPackage":"xxx",
"appActivity":"xxx",
#确保自动化之后不重制app
"noReset":True,
#设置session的超时时间,单位秒
"newCommandTimeout":6000
#'app':'xxx.apk'
}
网友评论