学习目标
- 能够使用代码点击按钮
- 能够使用代码对输入框输入文字
- 能够使用代码对输入框清空文字
- 能够使用代码获取元素的文本内容
- 能够使用代码获取元素的位置和大小
- 能够使用代码根据属性名获取元素的属性值
一. 元素操作API
1.1 点击元素
应用场景
需要点击某个按钮的时候使用
方法名
# 对element按钮进行点击操作
element.click()
示例
- 打开《设置》
- 点击放大镜按钮
核心代码
driver.find_element_by_id("com.android.settings:id/search").click()
1.2 输入和清空输入框内容
应用场景
需要对输入框进行输入或清空的时候使用
方法名
# 对element输入框进行输入操作
# 参数:
# value:输入的内容
element.send_keys(value)
# 对element输入框进行输入操作
element.clear()
示例
- 打开《设置》
- 点击 ”放大镜“
- 输入 ”hello“
- 暂停 2 秒
- 清空所有文本内容
- 暂停 5 秒
- 输入 ”你好“
核心代码
driver.find_element_by_id("com.android.settings:id/search").click()
edit_text = driver.find_element_by_class_name("android.widget.EditText")
edit_text.send_keys("hello")
time.sleep(2)
edit_text.clear()
time.sleep(5)
edit_text.send_keys("你好")
注意点
默认输入中文无效,但不会报错,需要在 ”前置代码“ 中增加两个参数
desired_caps[‘unicodeKeyboard’] =True
desired_caps[‘resetKeyboard’] = True
1.3 获取元素的文本内容
应用场景
需要获取按钮、文本框、输入框等控件的文本内容时使用
属性名
# 获取element控件的文本内容
# 返回值:
# 控件的文本内容
element.text
示例
- 打开《设置》
- 获取所有 resource-id 为 ”com.android.settings:id/title“ 的元素,并打印其文字内容
核心代码
titles = driver.find_elements_by_id("com.android.settings:id/title")
for title in titles:
print(title.text)
1.4 获取元素的位置和大小
应用场景
需要获取元素的位置和大小的时候使用
属性名
# 获取element的位置
# 返回值:
# 字典,x为元素的x坐标,y为元素的y坐标
element.location
# 获取element的大小
# 返回值:
# 字典,width为宽度,height为告诉
element.size
示例
- 打开《设置》
- 获取 ”放大镜“ 的位置和大小
核心代码
search_button = driver.find_element_by_id("com.android.settings:id/search")
print(search_button.location)
print(search_button.size)
1.5 获取元素的属性值
应用场景
根据特征定位到元素后,使元素的属性名获取对应的属性值
方法名
# 对element进行点击操作
# 参数:
# value:要获取的属性名
# 返回值:
# 根据属性名得到的属性值
element.get_attribute(value) # value:元素的属性
示例
- 打开《设置》
- 获取所有 resource-id 为 ”com.android.settings:id/title“ 的元素
- 使用 get_attribute 获取这些元素的 enabled、text、content-desc、resource-id、class 的属性值
核心代码
titles = driver.find_elements_by_id("com.android.settings:id/title")
for title in titles:
print(title.get_attribute("enabled"))
print(title.get_attribute("text"))
print(title.get_attribute("name"))
print(title.get_attribute("resourceId"))
print(title.get_attribute("ClassName"))
注意点
value=‘text’ 返回text的属性值
value=‘name’ 返回content-desc / text属性值
value=‘className’ 返回 class属性值,只有 API=>18 才能支持
value=‘resourceId’ 返回 resource-id属性值,只有 API=>18 才能支持