文章目录
- 前言
- 一、点击&输入&清空操作
- 1.1 点击元素
- 1.2 输入&清空元素
- 二、获取文本内容&位置&大小操作
- 2.1 获取文本内容
- 2.2 获取位置&大小
- 三、根据属性名获取属性值操作
- 四、滑动和拖拽操作
- 4.1 _swipe
- 4.2 _scroll
- 4.3 darg_and_drop
- 4.4 滑动和拖拽事件选择
- 五、高级手势TouchAction
- 5.1 轻敲操作
- 5.2 按下&抬起操作
- 六、等待&长按操作
- 七、移动操作
- 八、分辨率&截图操作
- 九、获取和设置手机网络操作
- 十、发送键到设备&操作通知栏操作
- 总结
前言
一、点击&输入&清空操作
1.1 点击元素
(1)应用场景
需要点击某个按钮的时候使用
(2)方法名
#对element按钮进行点击操作
element.click()
(3)示例
1.打开《设置》
2.点击放大镜按钮
(4)核心代码
driver.find_element_by_id("com.android.settings:id/search").click()
1.2 输入&清空元素
需要对输入框进行输入或清空的时候使用
(2)方法名
#对element输入框进行输入操作
#参数:value:输入的内容
element.send_keys(value)
#对element输入框进行输入操作
element.clear()
(3)示例
1.打开《设置》
2.点击放大镜按钮
3.输入"hello"
4.暂停⒉秒
5.清空所有文本内容
6.暂停5秒
7.输入"你好"
(4)核心代码
#点击放大镜
driver.find_element_by_id("com.android.settings:id/search").click()
#输入hello
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)
二、获取文本内容&位置&大小操作
2.1 获取文本内容
(1)应用场景
需要获取按钮、文本框、输入框等控件的文本内容时使用
(2)方法名
#获取element控件的文本内容
#返回值:
#控件的文本内容
element.text
(3)示例
1.打开《设置》
2.获取所有resource-id 为"com.android.settings:id/title”的元素,并打印其文字内容
(4)核心代码
titles = driver.find_elements_by_id("com.android.settings:id/title")
for title in titles:
print(title.text)
2.2 获取位置&大小
(1)应用场景
需要获取元素的位置和大小的时候使用
(2)方法名
#获取element控件的文本内容
#返回值:
#字典,x为元素的x坐标,y为元素的y坐标
element. location
#获取element的大小
#返回值:
#字典,width为宽度,height为告诉
element.size
(3)示例
1.打开《设置》
2.获取"放大镜”的位置和大小
(4)核心代码
search_button = driver.find_element_by_id("com.android.settings:id/search")
print(search_button . location)
print(search_button.size)
三、根据属性名获取属性值操作
(1)应用场景
根据特征定位到元素后,使元素的属性名获取对应的属性值
(2)方法名
#对element进行点击操作
#参数:
#value:要获取的属性名
#返回值:
#根据属性名得到的属性值
element.get_attribute(value) # value:元素的属性
(3)示例
1.打开《设置》
2.获取所有resource-id为“com.android.settings:id/title”的元素
3.使用get_attribute 获取这些元素的enabled、text、content-desc、resource-id、class的属性值
(4)核心代码
titles = driver.find_elements_by_id("com.android.settings:id/title")
for title in titles:
print(title.get_attribute("enab1ed"))
print(title.get_attribute("text")
print(title.get_attribute("name"))
print(title.get_attribute( "resourceId"))
print(title.get_attribute("className"))
注意点:
(1)value='text'返回text的属性值(2)value=name'返回cpntent-desc / text属性值
(3)value='resourceld'返回resource-id属性值,只有API=>18才能支持
(4)value='resourceld'返回resource-id属性值,只有API=>18才能支持
四、滑动和拖拽操作
应用场景
我们在做自动化测试的时候,有些按钮是需要滑动几次屏幕后才会出现,此时,我们需要使用代码来模拟手指的滑动,也就是我们将要学习的滑动和拖拽事件
4.1 _swipe
(1)概念
从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动。
(2)方法名
#从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动
#参数:
#start_x:起点x轴坐标
#start_y:起点Y轴坐标
#end_x:终点x轴坐标
#end_y:终点Y轴坐标
#duration:滑动这个操作一共持续的时间长度,单位:ms
driver.swipe(start_x,start_y,end_x,end_y,duration=None)
(3)示例
示例1:
模拟手指从(100,2000),滑动到(100,1000)的位置核心代码
driver.swipe(100,2000,100,1000)
示例2:
模拟手指从(100,2000),滑动到(100,100)的位置核心代码
driver.swipe(100,2000,100,100)
示例3:
模拟手指从 (100,2000),滑动到(100,100)的位置,持续5秒
核心代码
driver.swipe(100,2000,100,100,5000)
小结
距离相同时,持续时间越长,惯性越小
持续时间相同时,手指滑动的距离越大,实际滑动的距离也就越大
4.2 _scroll
(1)概念
从一个元滑动到另一个元素,直到页面自动停止。
(2)方法名
#从一个元素滑动到另一个元素,直到页面自动停止
#参数:
#origin_el:滑动开始的元素
#destination_el:滑动结束的元素
driver.scroll(origin_e1,destination_e1)
(3)示例
将“存储”拖拽到“更多"
核心代码
save_button = driver.find_element_by_xpath("//*[@text='存储']")
more_button = driver.find_element_by_xpath("/ /*[@text='更多']")
driver.scroll(save_button,more_button)
小结:
不能设置持续时间,惯性很大
4.3 darg_and_drop
(1)概念
从一个玩素滑动到另一个元素,第二个元素替代第一个元素原本屏幕上的位置。
(2)方法名
# 从一个元素滑动到另一个元素,第二个元素替代第一个元素原本屏幕上的位置
#参数:
#origin_el:滑动开始的元素
#destination_el:滑动结束的元素
driver.drag_and_drop(origin_e1, destination_e1)
(3)示例
将“存储”拖拽到“更多"核心代码
核心代码
save_button = driver.find_element_by_xpath("//*[@text='存储']")
more_button = driver.find_element_by_xpath("/ /*[@text='更多']")
driver.drag_and_drop(save_button,more_button)
小结:
不能设置持续时间,没有惯性
4.4 滑动和拖拽事件选择
滑动和拖拽几非就是考虑是否有“惯性”,以及传递的参数是“元素”还是“坐标"。
可以分成以下四种情况:
- 有“惯性”,传入“元素”
- scroll
- 无“惯性”,传入“元素”
- drag_and_drop
- 有“惯性”,传入“坐标”
- swipe,并且设置较短的duration时间
- 无“惯性”,传入“坐标”
- swipe,并且设置较长的duration时间
五、高级手势TouchAction
(1)应用场景
TouchAction可以实现一些针对手势的操作,比如滑动、长按、拖动等。我们可以将这些基本手势组合成一个相对复杂的手势。
比如,我们解锁手机或者一些应用软件都有手势解锁的这种方式。
(2)使用步骤
1.创建TouchAction对象
2.通过为对象调用想执行的手势
3.通过perform()执行动作注意点
(3)注意点:
所有手势都要通过执行perform()函数才会运行。
5.1 轻敲操作
(1)应用场景
模拟手指对某个元素或坐标按下并快速抬起。比如,固定点击(100,100)的位置。
(2)方法名
#模拟手指对元素或坐标的轻敲操作
#参数:
#element:元素
#x∶x坐标
#y:y坐标
TouchAction(driver).tap(element=None,x=None,y=None).perform()
(3)示例
1.打开《设置》
2.轻敲“WLAN"核心代码
(4)核心代码
el = driver.find_element_by_xpath("//*[contains(@text, 'WLAN')]")
TouchAction(driver).tap(e1).perform
5.2 按下&抬起操作
(1)应用场景
模拟手指一直按下,模拟手指抬起。可以用来组合成轻敲或长按的操作
(2)方法名
#模拟手指对元素或坐标的按下操作
#参数:
#el:元素
#x︰x坐标
#y: y坐标
TouchAction(driver).press(el=None,x=None,y=None).perform()
#模拟手指对元素或坐标的抬起操作
TouchAction(driver).release().perform()
(3)示例
示例1:
使用坐标的形式点击WLAN (650,650),2秒后,按下(650,650)的位置
核心代码:
TouchAction(driver).press(x=650,y=650).perform()
time.sleep(2)
TouchAction(driver).press(x=650,y=650).perform()
示例2:
使用坐标的形式点击WLAN (650,650) ,2秒后,按下(650,650)的位置,并抬起
核心代码:
TouchAction(driver).press(x=650,y=650).perform()
time.sleep(2)
TouchAction(driver).press(x=650,y=650).release().perform()
六、等待&长按操作
等待操作:
(1)应用场景
模拟手指等待,比如按下后等待5秒之后再抬起。
(2)方法名
#模拟手指暂定操作
#参数:
#ms:暂停的毫秒数
TouchAction(driver).wait(ms=0).perform()
(3)示例
使用坐标的形式点击WLAN (650,650),2秒后,按下(650,650)的位置,暂停2秒,并抬起
(4)核心代码
TouchAction(driver).tap(x=650,y=650).perform()
time.sleep(2)
TouchAction(driver).press(x=650,y=650).wait(2000). release().perform()
长按操作:
(1)应用场景
模拟手指对元素或坐标的长按操作。比如,长按某个按钮弹出菜单。
(2)方法名
#模拟手指对元素或坐标的长按操作
#参数:
#el:元素
#x︰x坐标
#y: y坐标
#duration:长按时间,毫秒
TouchAction(driver).long_press(e1=None,x=None,y=None,duration=1000) . perform()
(3)示例
使用坐标的形式点击WLAN (650,650),2秒后,长按(650,650)的位置持续⒉秒
(4)核心代码
TouchAction(driver).tap(x=400,y=400).perform()
time.sleep(2)
TouchAction(driver).long_press(x=400,y=400,duration=2000) . release().perform()
七、移动操作
长按操作:
(1)应用场景
模拟手指移动操作,比如,手势解锁需要先按下,再移动。
(2)方法名
#模拟手指对元素或坐标的移动操作
#参数:
#el:元素
#x︰x坐标
#y: y坐标
#duration:长按时间,毫秒
TouchAction(driver).move_to(e1=None,x=None,y=None).perform()
(3)示例
在手势解锁中,画一个如下图的案例
包名界面名为com.android.settingsl.ChooseLockPattern
(4)核心代码
八、分辨率&截图操作
(1)应用场景
视频应用在使用流量看视频的时候,大部分都会提示用户正在是否继续播放。作为测试人员,我们可能需要用自动化的形式来判断是否有对应的提示。即,用流量的时候应该有提示,不用流量的时候应该没有提示。
(2)方法名
#获取手机网络
driver.network_connection
(3)示例
获取当前网络类型,并打印
(4)核心代码
def test3(self):
"""
获取手机网络
"""
print(self.driver.network_connection)