移动端自动化测试04

App模拟手势高级操作
TouchAction是AppiumDriver的辅助类,主要针对手势操作,比如滑动、长按、拖动等,
原理是将一系列的动作放在一个链条中发送到服务器,服务器接受到该链条后,解析各个动作,逐个执行。

所有的手势都要通过执行函数才会执行

 #获取手机时间
driver.device_time
#获取手机分辨率
phone_size = driver.get_window_size()
# 连续音量增加2
for i in range(2):
    driver.keyevent(24)
# 打开通知栏
driver.open_notifications()
# 点击横幅
driver.find_element_by_id("com.android.systemui:id/header").click()
# 点击飞行模式
driver.find_element_by_xpath("//*[contains(@text,'飞行')]").click()
# 点击home键
driver.keyevent(3)
# 获取手机当前网络
driver.network_connection
# 设置手机网络,可能需要超级权限
driver.network_connection(1)
#通知栏进入app
driver.open_notifications()
tongzhidingwei = driver.find_element_by_xpath("//*[contains(@text,'哈哈')]")
print(tongzhidingwei.text)
tongzhidingwei.click()

使用keyevent函数的常用键值
KEYCODE_CALL 拨号键 5
KEYCODE_ENDCALL 挂机键 6
KEYCODE_HOME 按键Home 3
KEYCODE_MENU 菜单键 82
KEYCODE_BACK 返回键 4
KEYCODE_SEARCH 搜索键 84
KEYCODE_CAMERA 拍照键 27
KEYCODE_FOCUS 拍照对焦键 80
KEYCODE_POWER 电源键 26
KEYCODE_NOTIFICATION 通知键 83
KEYCODE_MUTE 话筒静音键 91
KEYCODE_VOLUME_MUTE 扬声器静音键 164
KEYCODE_VOLUME_UP 音量增加键 24
KEYCODE_VOLUME_DOWN 音量减小键 25
KEYCODE_ENTER 回车键 66
KEYCODE_ESCAPE ESC键 111
KEYCODE_DPAD_CENTER 导航键 确定键 23
KEYCODE_DPAD_UP 导航键 向上 19
KEYCODE_DPAD_DOWN 导航键 向下 20
KEYCODE_DPAD_LEFT 导航键 向左 21
KEYCODE_DPAD_RIGHT 导航键 向右 22
KEYCODE_MOVE_HOME 光标移动到开始键 122
KEYCODE_MOVE_END 光标移动到末尾键 123
KEYCODE_PAGE_UP 向上翻页键 92
KEYCODE_PAGE_DOWN 向下翻页键 93
KEYCODE_DEL 退格键 67
KEYCODE_FORWARD_DEL 删除键 112
KEYCODE_INSERT 插入键 124
KEYCODE_TAB Tab键 61
KEYCODE_NUM_LOCK 小键盘锁 143
KEYCODE_CAPS_LOCK 大写锁定键 115
KEYCODE_BREAK Break/Pause键 121
KEYCODE_SCROLL_LOCK 滚动锁定键 116
KEYCODE_ZOOM_IN 放大键 168
KEYCODE_ZOOM_OUT 缩小键 169
KEYCODE_ALT_LEFT Alt+Left
KEYCODE_ALT_RIGHT Alt+Right
KEYCODE_CTRL_LEFT Control+Left
KEYCODE_CTRL_RIGHT Control+Right
KEYCODE_SHIFT_LEFT Shift+Left
KEYCODE_SHIFT_RIGHT Shift+Right
桌面滑动

w_h = driver.get_window_size()
h = w_h.get("height")
w = w_h.get("width")

driver.swipe(w*0.8,h*0.5,w*0.2,h*0.5,1000)

手指轻敲操作
方法:tag(element=None,x=None,y=None)
方法:perform() #发送命令到服务器执行操作
参数:
1.element被定位的元素
2.x相对于元素左上角的坐标,通常会使用元素的x轴坐标
3.y通常会使用元素的y轴坐标
代码实现:

 # 通过元素定位方式敲击屏幕
  el = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
  TouchAction(driver).tap(el).perform()

  # 通过坐标方式敲击屏幕,WLAN坐标:x=155,y=250
  # TouchAction(driver).tap(x=155,y=250).perform()

手指按操作
模拟手指按下屏幕,按就要对应着离开
方法:press(el=None, x=None, y=None)
方法:release() # 结束动作,手指离开屏幕
参数:
1.element:被定位到的元素
2.x:通常会使用元素的X轴坐标
3.y:通常会使用元素的Y轴坐标
代码实现:

  # 通过元素定位方式按下屏幕
  el = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
  TouchAction(driver).press(el).release().perform()

  # 通过坐标方式按下屏幕,WLAN坐标:x=155,y=250
  # TouchAction(driver).press(x=155,y=250).release().perform()

等待操作
方法:wait(ms=0)
参数:
ms:暂停的毫秒数
代码实现:

 # 点击WLAN
  driver.find_element_by_xpath("//*[contains(@text,'WLAN')]").click()
  # 定位到WiredSSID
  el =driver.find_element_by_id("android:id/title")
  # 通过元素定位方式长按元素
  TouchAction(driver).press(el).wait(5000).perform()

  # 通过坐标方式模拟长按元素
  # 添加等待(有长按)/不添加等待(无长按效果)
  # TouchAction(driver).press(x=770,y=667).wait(5000).release().perform()

手指长按操作
模拟手机按下屏幕一段时间,按就要对应着离开.
方法:long_press(el=None, x=None, y=None, duration=1000)
参数:
1.element:被定位到的元素
2.x:通常会使用元素的X轴坐标
3.y:通常会使用元素的Y轴坐标
4.duration:持续时间,默认为1000ms
代码实现:

  # 点击WLAN
  driver.find_element_by_xpath("//*[contains(@text,'WLAN')]").click()
  # 定位到WiredSSID
  el =driver.find_element_by_id("android:id/title")
  # 通过元素定位方式长按元素
  TouchAction(driver).long_press(el,duration=5000).release().perform()

  # 通过坐标方式长按元素,WiredSSID坐标:x=770,y=667
  # 添加等待(有长按)/不添加等待(无长按效果)
  # TouchAction(driver).long_press(x=770,y=667).perform()

手指移动操作
模拟手机的滑动操作
方法:move_to(el=None, x=None, y=None)
参数:
1.el:定位的元素
2.x:相对于前一个元素的X轴偏移量
3.y:相对于前一个元素的Y轴偏移量
代码实现:

 # 定位到WLAN
    el1 = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")
    # 定位到存储
    el2 = driver.find_element_by_xpath("//*[contains(@text,'存储')]")
    # 存储上滑到WLAN
    driver.drag_and_drop(el2,el1)
    # 定位到用户
    el3 = driver.find_element_by_xpath("//*[contains(@text,'用户')]")
    # 注意 这次使用drag_and_drop方法,传入的"存储定位"仍使用其原始在屏幕上的位置,所以是由存储滑动到用户才可以上滑,否则需要重新"定位存储"
    # 存储上滑倒用户位置
    driver.drag_and_drop(el2,el3)
    # 点击安全按钮
    driver.find_element_by_xpath("//*[contains(@text,'安全')]").click()
    # 点击屏幕锁定方式按钮
    driver.find_element_by_xpath("//*[contains(@text,'屏幕锁定')]").click()
    # 点击图案按钮
    driver.find_element_by_xpath("//*[contains(@text,'图案')]").click()
    # 绘制图案四个坐标 1:(244,967) 2:(723,967) 3:(723,1442) 4:(244,1916)
    TouchAction(driver).press(x=244,y=967).wait(100).move_to(x=479,y=0).wait(100)\
        .move_to(x=0,y=475).wait(100).move_to(x=-479,y=474).release().perform()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值