UIAutomatorViewer
元素定位操作API
定位一个元素
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
# 启动一个字典 包装相应的启动参数
desired_caps = dict()
# 平台的名字,安卓还是IOS 大小写无所谓
desired_caps['platformName'] = 'Android'
# 平台的版本,(5.4.3 可以写 5.4.3 5.4 5)
desired_caps['platformVersion'] = '7.1.2'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = 'samsung'
# 要打开的应用程序 包名
desired_caps['appPackage'] = 'com.android.settings'
# 要打开的界面 启动名 界面名
desired_caps['appActivity'] = '.Settings'
# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 点击放大镜按钮 点击
driver.find_element(AppiumBy.ID,"com.android.settings:id/search").click()
# 输入框输入hello
driver.find_element(AppiumBy.CLASS_NAME,"android.widget.EditText").send_keys("hello")
# 点击返回
driver.find_element(AppiumBy.XPATH,"//*[@content-desc='收起']").click()
time.sleep(3)
driver.quit()
定位一组元素
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
# 启动一个字典 包装相应的启动参数
desired_caps = dict()
# 平台的名字,安卓还是IOS 大小写无所谓
desired_caps['platformName'] = 'Android'
# 平台的版本,(5.4.3 可以写 5.4.3 5.4 5)
desired_caps['platformVersion'] = '7.1.2'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = 'samsung'
# 要打开的应用程序 包名
desired_caps['appPackage'] = 'com.android.settings'
# 要打开的界面 启动名 界面名
desired_caps['appActivity'] = '.Settings'
# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
titles = driver.find_elements(AppiumBy.ID,"android:id/title")
print(titles,len(titles))
for title in titles:
print(title.text)
# 下标从0开始开始
titles[7].click()
titles = driver.find_elements(AppiumBy.CLASS_NAME,"android.widget.TextView")
for i in titles:
print(i.text)
print(len(titles))
titles[5].click()
titles = driver.find_elements(AppiumBy.XPATH,"//*[contains(@text,'设')]")
for i in titles:
print(i.text)
print(len(titles))
time.sleep(5)
# driver.quit()
button = driver.find_element_by_id("xxxx")
button.click()
# 报错
eles = driver.find_elements_by_id("xxxx")
print(eles)
for i in eles:
print(i)
# 不会报错 就是返回一个空列表
元素等待
显示等待 单个 一次性 隐式等待 全局元素
显示等待
from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from appium.webdriver.common.appiumby import AppiumBy
# 启动一个字典 包装相应的启动参数
desired_caps = dict()
# 平台的名字,安卓还是IOS 大小写无所谓
desired_caps['platformName'] = 'Android'
# 平台的版本,(5.4.3 可以写 5.4.3 5.4 5)
desired_caps['platformVersion'] = '7.1.2'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = 'samsung'
# 要打开的应用程序 包名
desired_caps['appPackage'] = 'com.android.settings'
# 要打开的界面 启动名 界面名
desired_caps['appActivity'] = '.Settings'
# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 一共找5秒 每一秒调用一次方法
element = WebDriverWait(driver, timeout=5, poll_frequency=1).until(
lambda x: x.find_element(AppiumBy.XPATH, "//*[@content-desc='收起']"))
element.click()
driver.quit()
在显示等待的时间里 我们可以自己点击操作 跳转页面 在5秒内点到有包含收起元素的页面 其不会报错
隐式等待
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
# 启动一个字典 包装相应的启动参数
desired_caps = dict()
# 平台的名字,安卓还是IOS 大小写无所谓
desired_caps['platformName'] = 'Android'
# 平台的版本,(5.4.3 可以写 5.4.3 5.4 5)
desired_caps['platformVersion'] = '7.1.2'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = 'samsung'
# 要打开的应用程序 包名
desired_caps['appPackage'] = 'com.android.settings'
# 要打开的界面 启动名 界面名
desired_caps['appActivity'] = '.Settings'
# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(5)
driver.find_element(AppiumBy.XPATH,"//*[@content-desc='收起']").click()
time.sleep(2)
driver.quit()
元素操作
点击:
driver.find_element(AppiumBy.ID,"com.android.settings:id/search").click()
driver.find_element(AppiumBy.ID,"com.android.settings:id/search").click()
driver.find_element(AppiumBy.CLASS_NAME,"android.widget.EditText").send_keys("123123")
time.sleep(3)
driver.find_element(AppiumBy.CLASS_NAME,"android.widget.EditText").clear()
time.sleep(2)
driver.find_element(AppiumBy.CLASS_NAME,"android.widget.EditText").send_keys("你好")
time.sleep(2)
driver.quit()
titles = driver.find_elements(AppiumBy.ID,"android:id/title")
print(titles,len(titles))
for title in titles:
print(title.text)
time.sleep(2)
driver.quit()
enabled 是否可用 变灰 不可用False 可用 亮的 可用True
获取元素的属性值:
传入属性名 返回属性值
根据左边的名 获取右边的值
如使用其它版本注意点:
# 连接appium服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
elements = driver.find_elements(AppiumBy.ID,"android:id/title")
for i in elements:
print(i.get_attribute("enabled"))
print(i.get_attribute("text"))
print(i.get_attribute("content-desc"))
print(i.get_attribute("name")) # 与text一样
print(i.get_attribute("resource-id"))
print(i.get_attribute("class"))