软件测试 app自动化02 Appium常用的元素定位工具 元素的属性 元素定位方法
1 Appium常用的元素定位工具有三个,Android sdk\tools目录下的`uiautomatorviewer.bat`、appium Inspactor和Weditor。2 根据id属性值、xpath值、text 文本内容、description或content-desc值来定位3 在find_element()方法选择MobileBy.ID、By.ID、MobileBy.XPATH、
1 Appium常用的元素定位工具
1.1 uiautomatorviewer
点击,下图图标,即可连接模拟器,如下图所示:
点击,下图图标,即可同步模拟器操作,如下图所示:
此时,可以通过元素的resource-id属性来定位该元素。
若出现报错,则执行下面操作:
进入任务管理器,停止adb.exe,然后在dos界面输入adb connect 127.0.0.1:62001,再输入adb devices后,再点击uiautomatorview.bat文件去运行。
1.2 Appium Inspector
Appium server工具自带的定位工具
Appium server需要下载Appium Inspector程序,下载地址如下:
https://github.com/appium/appium-inspector/releases
下载程序,如下图所示:
安装成功如下图的图标:
双击使用Appium Inspector,Remote Path 填写/wd/hub
,并且还是相关的参数,如下图所示:
点击【start session】按钮,成功进入页面,如下图所示:
1.3 Weditor
Uiautomator2 Python第三方库 appUI自动化测试框架
在dos命令窗口输入3条命令:
pip install Uiautomator2
python -m Uiautomator2 init
pip install weditor
确认工具是否安装成功,输入命令 weditor --help
Weditor工具的使用
(1)启动weditor工具
(2)选择操作系统,填写设备名称,点击连接
(3)开的定位元素,获取元素信息
(4)在dos窗口使用快捷键ctrl+c
,退出weditor
2 元素的属性
(1)resourceid属性
(2)class/classname 元素标签名属性
(3)text 文本内容
(4)description或content-desc属性
(5)xpath属性
(6)appPackage属性
(7)appActivity属性
3 元素定位方法
(1)取出resourceid属性值
使用find_element(By.id,xxx)或find_element(MobileBy.ID,xxx)来定位元素。
例子如下:
from appium.webdriver.common.mobileby import MobileBy
from appium import webdriver
desired_caps = {
'automationName':'UiAutomator2',
'platformName':'Android',# 指定操作系统
'platformVersion':'7.1.2', # 指定系统版本
'deviceName':'127.0.0.1:62001', # 指定设备名称
'appPackage':'com.tal.kaoyan', # 被操作的应用程序包名
'appActivity':'com.tal.kaoyan.ui.activity.SplashActivity', # 启动页面
'noReset':'true' #true 不重置 flase 重置
}
#发送指令给appium server
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
#拿出id属性值,使用MobileBy.ID方法定位
username_el = driver.find_element(MobileBy.ID,"com.tal.kaoyan:id/login_email_edittext")
username_el.send_keys("2121211212")
time.sleep(2)
username_el.clear()
time.sleep(2)
#拿出id属性值,使用By.ID方法定位
username_el_2 = driver.find_element(By.ID,"com.tal.kaoyan:id/login_email_edittext")
username_el_2.send_keys("2121211212")
time.sleep(2)
username_el_2.clear()
time.sleep(2)
分析上述代码:
MobileBy.ID取出id属性值,定位用户框。此外还可以使用By.ID取出id属性值,定位用户框。
(2)取出text属性值使用MobileBy.ANDROID_UIAUTOMATOR,这种定位方式利用系统自带框架(Uiautomator1/Uiautomator2)实现元素定位,基于java代码编写,通过这些框架实现元素定位,实质就是调用这些框架里面的方法(UiSelector类实现元素定位)。
例子如下:
# 拿出text属性值使用MobileBy.ANDROID_UIAUTOMATOR
username_el_3 = driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,'new UiSelector().text("请输入用户名")')
username_el_3.send_keys("123")
time.sleep(2)
username_el_3.clear()
time.sleep(2)
分析上述代码:
UiSelector类里面的方法,如果参数是字符串类型,必须是双引号 例如:text(“请输入用户名”)
使用UiSelector类需要实例化
。
此外还可以多个属性组合定位 new UiSelector().方法1().方法2().方法3()
,如下代码:
username_el_4 = driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,'new UiSelector().className("android.widget.EditText").resourceId("com.tal.kaoyan:id/login_email_edittext")')
username_el_4.send_keys("123123")
time.sleep(2)
username_el_4.clear()
time.sleep(2)
(3)取出description/content-desc属性值定位
例子,使用description/content-desc属性值定位QQ应用程序的账号文本框,代码如下:
import time
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
# 设置操控终端的配置参数
desired_caps = {
'automationName':'UiAutomator2',
'platformName':'Android',# 指定操作系统
'platformVersion':'7.1.2', # 指定系统版本
'deviceName':'127.0.0.1:62001', # 指定设备名称
'appPackage':'com.tencent.mobileqq', # 被操作的应用程序包名
'appActivity':'com.tencent.mobileqq.activity.SplashActivity', # 启动页面
'noReset':'true' #true 不重置 ;flase 重置
}
# 发送指令给appium server
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
# 定位登录按钮
login_button = driver.find_element(MobileBy.ID,'com.tencent.mobileqq:id/btn_login')
# 点击登录按钮
login_button.click()
time.sleep(2)
# 取出description/content-desc属性值定位
ele1 = driver.find_element(MobileBy.ACCESSIBILITY_ID,"请输入QQ号码或手机或邮箱")
ele1.send_keys("123")
time.sleep(2)
分析上述代码:
首先获取QQ应用程序的包名和启动页面,然后使用MobileBy.ID定位【登录】按钮,最后使用MobileBy.ACCESSIBILITY_ID定位用户名文本框。
(4)选择xpath定位
例子,使用xpath定位定位考研帮app用户名文本框,代码如下:
import time
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
# 设置操控终端的配置参数
desired_caps = {
'automationName':'UiAutomator2',
'platformName':'Android',# 指定操作系统
'platformVersion':'7.1.2', # 指定系统版本
'deviceName':'127.0.0.1:62001', # 指定设备名称
'appPackage':'com.tal.kaoyan', # 被操作的应用程序包名
'appActivity':'com.tal.kaoyan.ui.activity.SplashActivity', # 启动页面
'noReset':'true' #true 不重置 ;flase 重置
}
# 发送指令给appium server
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
# 定位用户名文本框
username_ele= driver.find_element(MobileBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.EditText[1]')
username_ele.send_keys("123")
time.sleep(2)
分析上述代码:
通过appium spector工具定位用户名文本框,找到对应的xpath值,如下图所示:
小结
1 Appium常用的元素定位工具有三个,Android sdk\tools目录下的uiautomatorviewer.bat
、appium Inspactor和Weditor。
2 根据id属性值、xpath值、text 文本内容、description或content-desc值来定位
3 在find_element()方法选择MobileBy.ID、By.ID、MobileBy.XPATH、MobileBy.ANDROID_UIAUTOMATOR、MobileBy.ACCESSIBILITY_ID作为参数。
更多推荐
所有评论(0)