python_元素定位
一。appuim 元素定位辅助工具
1)启动
点击搜索按钮,等待
等待完毕:
启动会话:
页面页面介绍:
2)元素定位:
-搜索
搜索结果:
补充:
1.selenium中
webdriver.Chrome()运行原理:
-先启动一个服务端,再启动一个客户端 使用客户端给服务端发送请求
-start
-运行Chromedriver服务
-ChromeRemoteConnection 远程连接:
-向远程服务器发送命令。
2.appium
-服务端是appuim
-客户端也是初始化一个
-
-selenium与appium公用一个类:WebDriver
-selenium,只是使用了 Chrome()子类
-appium则使用了 Remote() 子类
3.MobileBy:继承了selenium中的By,自动有封装了一部分方法 与selenium相比定位方式少了些:比如 :css定位
二。元素定位
1.与selenium相比appium
-app 当中属性名是固定的,所有的元素都具备这些属性,
-id, class, content-desc, clickable, checkable, 都在辅助工具会显示的。
-id 可以不唯一, web 当中 id 是唯一
-app中class 是表示组件的名称,类似于 web 当中 tagname
-app 自动化测试当中,很少用单独的 class 定位
2.app中常用元素定位方式
- id, 确认什么时候唯一, inpect 查找元素。
- content-desc 元素标识, 经常没有。
--表达式:el=driver.find_element_by_accessibility("值")
- uiautomator 原生定位方式,value=Java代码
#以id为例(表达式需要使用JAVA写,Java代码表示字符串需要使用双引号,不像python一样单引号、双引号都可以,需要在引号前进行转义):
#单个条件
selector= 'new UiSelector().resourceId(\"id的value\")'
#多个条件
selector= 'new UiSelector().resourceId(\"id的value\").text("值")'
-表达式:el=driver.find_element_by_android_uiautomator("selector")
el=driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,"selector")
- xpath (相对路径,一般用。手机解析页面素速度比较慢)
表达式:driver.find_element(MobileBy.XPATH,"表达式")
3.元素定位:
from appium import webdriver
caps={
"platformName": "Android",#平台名称
"deviceName": "emulator-5554",#设备名字
"appPackage":"包名",
"appActivity":"页面",
}
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities=caps,
)
-方式一:
# 通过 ID
# el = driver.find_element("id", "值")
# el.click()
-方式二:
# 通过 content-desc 属性查找
# el = driver.find_element_by_accessibility_id("值")
-方式三:uiautomator
参考地址:https://developer.android.com/reference/android/support/test/uiautomator/UiSelector
-单个元素操作
# 值,value: Java 代码
# TODO: Java 代码表示字符串是用双引号,单引号不行,
# TODO:若有多个引号,可以在里面的引号之前打 \
selector = 'new UiSelector().resourceId(\"id值\")'
el = driver.find_element_by_android_uiautomator(selector)
#另外一种调用方法
# # el = driver.find_element(MobileBy.ANDROID_UIAUTOMATOR, "")
el.click()
-组合元素操作
参考地址:https://www.cnblogs.com/jianXu/p/5158396.html
# 和xpath 一样,可以进行条件的组合。
# 组合查询比 xpath 更快
# new UiSelector().resourceId("组合值1").text("组合值2") #等等通过链式调用生效
# new UiSelector().resourceId())
-父子元素
# 父元素, (子元素) ==》 通过子元素的特征找到父元素
new UiSelector().checkable(false).childSelector(
new UiSelector().checkable()
)
-方式四:xpath
注意:webview 中的text与H5环境中的text用法不一致
webvire中text是属性: @text=
H5中:text()=
# el = driver.find_element(MobileBy.XPATH, "")
time.sleep(2)
driver.quit()
4.元素定位其他辅助工具
uiautomatorviewer: android 调试工具 手动刷新
-在安卓环境:sdk\tools 启动
weditor #网易的工具 优点:xpath 是相对路径;鼠标可显示
参考:https://www.cnblogs.com/tzxy/p/11295717.html
-安装:
1.安装adb环境(ios这里不讲,后续补充)
2.python安装
pip install --pre -U uiautomator2
pip install weditor
3.连接设备,先使用 adb devices查看设备有没有连接上(必须连接),连接成功后 使用:python -m uiautomator2 init 给设备初始化
4.最后执行开启服务:python -m weditor
-使用:cmd中输入 “python -m weditor”启动服务,浏览器会自动打开;点击标题栏“Connect”等待绿色的麦穗图标出现 再点击“Reload”就可以把当前设备运行的软件加载出来
-xpath会展示相对路径
注意:
1.在元素定位中优先使用安卓自带的:uiautomatorviewer进行元素定位若无法定位建议使用weditor,若weditor也无法定位就使用appium
三。等待
元素等待
强制
隐式等待
显示等待
四:uiautomator2 服务无法启动的错误。
1.错误信息:
2.解决:
-先通过以下命令查找 uiautomator 服务
-命令:adb shell pm list package | grep uiautomator
-结果类似这样:
package:io.appium.uiautomator2.server
package:io.appium.uiautomator2.server.test
-也可以查看 instrumentation:
-命令:adb shell pm list instrumentation
-结果类似这样:instrumentation:io.appium.uiautomator2.server.test/android.support.test.runner.AndroidJUnitRunner (target=io.appium.uiautomator2.server)
-卸载 uiautomator2 服务:
-命令:
adb uninstall io.appium.uiautomator2.server
adb uninstall io.appium.uiautomator2.server.test
-重启appium