Appium元素信息操作API
本文介绍手机端元素信息的获取以及基本的输入操作。
- 前置代码
from appium import webdriver
# server 启动参数
desired_caps = {}
# 设备信息
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '192.168.56.101:5555'
# app的信息
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'
# 声明我们的driver对象
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
-
1、点击元素
-
2、发送数据到输入框
方法:send_keys(vaue) # value:需要发送到输入框内的文本
业务场景: 1.打开设置 2.点击搜索按钮 3.输入内容abc
代码实现:
# 点击搜索按钮
driver.find_element_by_id("com.android.settings:id/search").click()
# 定位到输入框并输入abc
driver.find_element_by_id("android:id/search_src_text").send_keys("abc")
重点:
大家可以将输入的abc 改成 输入中文,得到的结果:输入框无任何值输入且程序不会抱错
解决输入中文问题:
1.server 启动参数增加两个参数配置
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
2.再次运行会发现运行成功
# 点击搜索按钮
driver.find_element_by_id("com.android.settings:id/search").click()
# 定位到输入框并输入abc
driver.find_element_by_id("android:id/search_src_text").send_keys("传智播客")
-
3、清空输入框内容
方法:clear()
业务场景: 1.打开设置 2.点击搜索按钮 3.输入内容abc 4.删除已输入abc
代码实现: # 点击搜索按钮 driver.find_element_by_id("com.android.settings:id/search").click() # 定位到输入框并输入abc input_text = driver.find_element_by_id("android:id/search_src_text") # 输入abc input_text.send_keys("abc") time.sleep(1) # 删除abc input_text.clear()
-
4、获取元素的文本内容
方法: text
业务场景: 1.进入设置 2.获取所有元素class属性为“android.widget.TextView”的文本内容
代码实现: text_vlaue = driver.find_elements_by_class_name("android.widget.TextView") for i in text_vlaue: print(i.text) 执行结果: 设置 无线和网络 WLAN 更多 设备 显示 提示音和通知 存储
- 5、获取元素的属性值
方法: get_attribute(value) # value:元素的属性 ⚠️ value='name' 返回content-desc / text属性值 ⚠️ value='text' 返回text的属性值 ⚠️ value='className' 返回 class属性值,只有 API=>18 才能支持 ⚠️ value='resourceId' 返回 resource-id属性值,只有 API=>18 才能支持
业务场景: 1.进入设置 2.获取搜索按钮的content-desc属性值
-
代码实现: # 定位到搜索按钮 get_value = driver.find_element_by_id("com.android.settings:id/search") print(get_value.get_attribute("name")) 执行结果: 搜索
- 6、获取元素在屏幕上的坐标
方法:location
业务场景: 1.进入设置页面 2.获取搜索按钮在屏幕的坐标位置
代码实现: # 定位到搜索按钮 get_value = driver.find_element_by_id("com.android.settings:id/search") # 打印搜索按钮在屏幕上的坐标 print(get_value.location) 执行结果: {'y': 44, 'x': 408}
总代码:
from appium import webdriver
import time
#server 启动参
desired_caps = {}
# 设备信息
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '192.168.203.101:5555'
# app信息
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'
#支持中文
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
#连接设备
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
#通过id找到搜索按钮,并点击
driver.find_element_by_id("com.android.settings:id/search").click()
#找到搜索框
search=driver.find_element_by_id("android:id/search_src_text")
#搜索框中输入文字
search.send_keys("武汉加油!")
time.sleep(1)
driver.find_element_by_class_name("android.widget.ImageButton").click()
time.sleep(1)
#获取设置页面的元素列表
elementList=driver.find_elements_by_id("com.android.settings:id/title")
for i in elementList:
print(i.text)
time.sleep(2)
print("-----------")
elems=driver.find_elements_by_class_name("android.widget.TextView")
for j in elems:
print(j.get_attribute('name'))
print("-----------")
for j in elems:
print(j.get_attribute('text'))
print("-----------")
for j in elems:
print(j.get_attribute('className'))
print("-----------")
for j in elems:
print(j.get_attribute('resourceId'))
#输出搜索按钮的坐标
print("搜索按钮坐标:",driver.find_element_by_id("com.android.settings:id/search").location)
time.sleep(3)
driver.quit()
实现效果:
运行结果:
D:\Anaconda3\python.exe E:/pythonProject/get_info.py
WLAN
更多
显示
提示音和通知
存储
电池
应用
用户
位置信息
安全
-----------
设置
搜索
无线和网络
WLAN
更多
设备
显示
提示音和通知
存储
电池
应用
用户
个人
位置信息
安全
-----------
设置
无线和网络
WLAN
更多
设备
显示
提示音和通知
存储
电池
应用
用户
个人
位置信息
安全
-----------
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
android.widget.TextView
-----------
None
com.android.settings:id/search
com.android.settings:id/category_title
com.android.settings:id/title
com.android.settings:id/title
com.android.settings:id/category_title
com.android.settings:id/title
com.android.settings:id/title
com.android.settings:id/title
com.android.settings:id/title
com.android.settings:id/title
com.android.settings:id/title
com.android.settings:id/category_title
com.android.settings:id/title
com.android.settings:id/title
搜索按钮坐标: {'x': 1314, 'y': 76}
Process finished with exit code 0