Appium定位元素需要使用------>UIAutoMatorViewer,如下图所示:
因为By包升级,以前的老方法不可用,例如下面的代码
driver.find_element_by_accessibility_id("content-desc属性值")
#python 版本不同,不兼容这种方法
然后我又试了新的by包,如下面这种:
# id定位放大器,并点击图标
driver.find_element(by=By.ID,value="com.android.settings:id/search").click()
sleep(1)
# 使用class定位,输入hello
driver.find_element(by=By.CLASS_NAME,value="android.widget.EditText").send_keys('hello')
sleep(1)
# 使用xpath定位返会按钮,并点击
driver.find_element(by=By.XPATH,value="//*[@class='android.widget.ImageButton']").click()
sleep(1)
但是学习过程中发现新方法无法调用find_element_by_accessibility_id这种方法,python代码报黄色,我试了好几种编写方法,都会报错!
driver.find_element_by_accessibility_id("content-desc属性值")# ----->跑不通
driver.find_element(by=By.accessibility_id,value="content-desc属性值")# ----->跑不通
driver.find_element("accessibility","content-desc属性值").click()# ----->跑不通
然后查询其他人的解决方法得出能正确跑通的方法,具体如下操作:
# 导包----->AppiumBy
from appium.webdriver.common.appiumby import AppiumBy
#使用这种方法去调用元素,可以运行
driver.find_element(AppiumBy.ACCESSIBILITY_ID,value='搜索设置')
运行结果如下截图:
完整实现需求代码是这样的:
"""
需求:
# id定位放大器,并点击图标
# 使用class定位,输入hello
# 使用xpath定位返会按钮,并点击
# 使用name定位,点击放大镜按钮
#退出程序
"""
import os
from time import sleep
from appium import webdriver
# 导个AppiumBy包
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By
# 定义字典变量
desired_caps = {}
# 字典追加启动参
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "7.1.2"
desired_caps["deviceName"] = "192.168.56.101:5555"
desired_caps["appPackage"] = "com.android.settings"
desired_caps["appActivity"] = ".Settings"
# 设置中文
desired_caps["unicodeKeyboard"] = True
desired_caps["resetKeyboard"] = True
# 获取driver
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
"""
上面的代码不过多说明,
基本启动appium的代码
我这里使用的是雷电模拟器+appium+python代码方式
"""
sleep(1)
# id定位放大器,并点击图标
driver.find_element(by=By.ID, value="com.android.settings:id/search").click()
sleep(1)
# 使用class定位,输入hello
driver.find_element(by=By.CLASS_NAME, value="android.widget.EditText").send_keys('hello')
sleep(1)
# 使用xpath定位返会按钮,并点击
driver.find_element(by=By.XPATH, value="//*[@class='android.widget.ImageButton']").click()
sleep(1)
# 使用name定位,点击放大镜按钮
# 我在这里发现了问题!!!!------>by_accessibility_id方法不可用!
# driver.find_element_by_accessibility_id("content-desc属性值")# ----->跑不通
# driver.find_element(by=By.accessibility_id,value="content-desc属性值")# ----->跑不通
# driver.find_element("accessibility","content-desc属性值").click()# ----->跑不通
# 正确的输入方法如下所示!!!
print(f"方便看能否运行,我打印了这行字...")
driver.find_element(AppiumBy.ACCESSIBILITY_ID, value='搜索设置')
print(f"ok调试结束,方法成功....")
sleep(3)
driver.quit()
学习过程遇到的一个小问题,发布出来供大家参考,本人技术有限,感谢观看!