? ? ? ?appium环境搭建完成后,我们通过什么方式去操作app应用程序呢,有了了解过web自动化测试的就清楚,我们是通过定位元素,再对app应用程序进行操作的,那么app是哪些元素定位的方式呢?接下来介绍以下。
一、元素定位辅助工具
方法一:通过appium中的inspect定位
步骤:1、启动appium之后,点击右上第一个搜索按键,
2、然后配置相关的启动app信息,启动应用程序
配置信息有:
1)platformName ==> 直接填入 Android / ios
2)deviceName ==> 手机连接电脑,cmd命令行输入:adb devices,获取设备名称,
3)appPackage、appActivity ==>cmd命令行输入:aapt dump badging + app安装包电脑路径
4)appium启动编写信息如下,点击启动会话:
元素显示如下:
注意点;1)xpath大部分用的为绝对路径(不适用);
2)id,80%都会有的
方法二:通过安卓官方提供的 uiautorviwer ( 升级版工具,升级xpath表达式)
操作步骤:1)打开安卓的sdk文件,
2)在tools文件下,打开bin文件,选中:uiautorviewer.bat
3)注意运行完,必须要手动关闭,driver.quit()
方法三:atx,weditor(元素定位辅助工具)
安装:pip install weditor ,通过cmd,运行 weditor,会通过默认浏览器打开界面,
? 可用xpathlife表达式
优势:能提供xpath表达式,;
劣势:weditor和appium不能同时使用(需关闭axt进程服务 或 直接卸载应用。)
二、元素定位表达式
查找元素:
- driver.find_element('id',' 表达式 ')
- driver.find_element('xpath',' 表达式 ')
- tagname不行,class_name可以,但相当于原来的tag_name,不能精准定位
初此之外,还可通过安卓原生的定位方式定位,但需要写java代码(没有提示)
java语言字符串,只能用双引号(" "),不能用单引号,
优势:原生代码,定位更快
locator = 'new UiSelector().resourceId("com.lemon.lemonban:id/navigation_my").checkable(false)'
driver.find_element_by_android_uiautomator(locator)
总结元素定位方式:
1) 优先使用id ;
2)xpath方便获取,还可用过text文本定位 ;
3)Android_uiautomator 原生模式 ;
4)content-desc driver.find_element_by_accessibility_id() 通过描述desc(description)去获取元素,但极可能没有
5)className 基本不用
使用:driver.find_element(By.ID,'com.xxzb.fenwoo:id/imageView3').click()
如为app特有的方式,(Android_uiautomator、accessibility_id)
driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,locator)
locator ==> 元素表达式
注意:
weditor、appium不能同时运行,会冲突;
关闭weditor,记得需打开应用,点击关闭所有服务
查看是否有uiautomator在运行
cmd ==》 adb shell pm list package | grep uiautomator (grep不行时,可改为findStr , window系统下)
卸载服务(一个个卸载)
adb uninstall com.github.uiautomator
adb uninstall com.github.uiautomator.tests
adb uninstall io.appium.uiautomator2.server
adb uninstall io.appium.uiautomator2.server.tests
from appium.webdriver import Remote
caps = {'platformName':'Android','deviceName':'emulator-5554',
'appPackage':'com.xxzb.fenwoo','appActivity':'com.xxzb.fenwoo.activity.addition.WelcomeActivity',
'noReset':True}
driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub',desired_capabilities=caps)
driver.implicitly_wait(10)
# 通过uiautorviewer获取元素表达式
driver.find_element('xpath','//android.widget.TextView[@text=\"发现\"]').click()
# 通过 atx 获取元素表达式
# driver.find_element('xpath','//*[@resource-id="com.xxzb.fenwoo:id/textView6"]').click()
# 通过inspect + 原生代码定位
locator = 'new UiSelector().resourceId("com.xxzb.fenwoo:id/imageView3").checkable(false)'
driver.find_element_by_android_uiautomator(locator).click()
driver.quit()
三、元素属性的获取
# 获取现在页面的源代码
print(driver.page_source)
# 获取当前的包名
print(driver.current_package)
# 获取当前页面,activity (可理解为web中的url)
print(driver.current_activity)
# 获取当前上下文环境 NATIVE_APP 原生app环境,对应h5环境
print(driver.current_context)
# start_activity 操作可直接跳转至具体页面 (需填两个参数,app_package、app_activity )
# app_package 可通过cmd 运行:aapt dump badging + 安装包路径
# app_activity 可通过cmd 运行:adb shell dumpsys activity|find "mResumedActivity" (从.activity开始获取)
from appium.webdriver import Remote
caps = {'platformName':'Android','deviceName':'emulator-5554',
'app':r'C:\Users\lalanala\Desktop\Future-release-2018.apk'}
driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub',desired_capabilities=caps)
driver.implicitly_wait(10)
driver.start_activity(app_package='com.xxzb.fenwoo',app_activity='.activity.addition.LoginActivity')
driver.quit()
总结
先简单记录至此,以便复习查看~~
现实总会比自己想象要差一点点,所以还是不要抱太大的希望吧,还是要脚踏实地,一步一个脚印往前看,fighting·~~
|