多测师肖sir_高级金牌讲师_第2个月第17讲app测试之实战定滑屏拓展(006)

==========================================================
导入的模块

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction
from time import sleep

1.driver.tap([坐标],持续点击时间)
[55,741][665,801]

案例:百度阅读【取消按钮】

坐标:bounds :[55,741][665,801] #第一个坐标值可以定位到,第二个坐标值定位就报错,不超出长度;

driver.tap(driver.tap([(55,741)],2)) #坐标x1,y1

2.TouchAction(driver) 触摸动作
导入: from appium.webdriver.common.touch_action import TouchAction

TouchAction对象包含(tab)、press(短按)、move_to(滑动到某个坐标)等方法

通过TouchAction对象,添加tap、move_to等操作,然后perform()执行,可以实现解锁屏幕等功能

(1)短按 (press)
(2)释放 (release)
(3)移动到 (moveTo)
(4)点击 (tap)
(5)等待 (wait)
(6)长按 (longPress)
(7)取消 (cancel)
(8)执行 (perform)

例如:

3.MultiAction()//多点触控
导入: from appium.webdriver.common.multi_action import MultiAction
通过MultiAction().add()添加多个TouchAction操作,最后调用perform()一起执行这些操作

action0 = TouchAction().tap(el)

action1 = TouchAction().tap(el)

MultiAction().add(action0).add(action1).perform()

4.driver.swipe(x1, y1, x2, y2,duration)
//从坐标(x1,x2)滑动到坐标(x2,y2),duration非必填项,滑动时间

(滑动的坐标不能超过屏幕的宽高)

可以通过【driver.get_window_size()】命令获得窗口高和宽,结果为{‘width’: 1080, ‘height’: 1776}

一个鼠标向上下左右活动的例子如下:

获得屏幕大小宽和高

def getSize(driver):
x = driver.get_window_size()[‘width’]
y = driver.get_window_size()[‘height’]
return (x, y)

屏幕向上滑动

def swipeUp(driver,t=1000):
l = getSize(driver)
x1 = int(l[0] * 0.5) #x坐标
y1 = int(l[1] * 0.75) #起始y坐标
y2 = int(l[1] * 0.25) #终点y坐标
driver.swipe(x1, y1, x1, y2,t)

屏幕向下滑动

def swipeDown(driver,t=1000):
l = getSize(driver)
x1 = int(l[0] * 0.5) #x坐标
y1 = int(l[1] * 0.25) #起始y坐标
y2 = int(l[1] * 0.75) #终点y坐标
driver.swipe(x1, y1, x1, y2,t)

屏幕向左滑动

def swipLeft(driver,t):
l=getSize(driver)
x1=int(l[0]*0.75)
y1=int(l[1]*0.5)
x2=int(l[0]*0.05)
driver.swipe(x1,y1,x2,y1,t)

屏幕向右滑动

def swipRight(driver,t=1000):
l=getSize(driver)
x1=int(l[0]*0.05)
y1=int(l[1]*0.5)
x2=int(l[0]*0.75)
driver.swipe(x1,y1,x2,y1,t)

调用向下滑动的方法

swipeDown(driver)
五、系统按键事件
press_keycode(AndroidKeyCode)//发送按键事件

例如:点击home键,home键的KeyCode是3

driver.press_keycode(3)

键名 描述 键值
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
六、driver的一些比较重要操作
1.reset()
//重置app

这时候driver会重置,相当于卸载重装应用。所以本地缓存会失效

driver.reset()

2.start_activity(包名,activity名)
//启动app的某一个activity

例如:driver.start_activity(“com.wuba.zhuanzhuan”,"./presentation.view.activity.LaunchActivity")

启动一个activity,这个activity必须是AndroidManifest.xml中有intent-filter的activity

<action android:name="android.intent.action.MAIN"/>

这种启动activity和driver的reset()不同的是

3.contexts
//获得所有contexts

driver.contexts

结果如下:

[‘NATIVE_APP’, ‘WEBVIEW_com.android.browser’]

NATIVE_APP:native的context

WEBVIEW_com.android.browser:webview的context,存放html的容器

4.current_context
//查看当前的context

driver.current_context

5.switch_to.context(context名)
//切换context

driver.switch_to.context(“WEBVIEW_com.wuba.zhuanzhuan”)

NATIVE时不能定位WEBVIEW的内容,在WEBVIEW的context时不能定位NATIVE的内容。

所以需要切换到对应的context中去进行操作

6.setNetworkConnection(bitmask掩码)
//设置网络类型

例如:设置网络类型为只开wifi

driver.set_network_connection(2)

网络的bitmask掩码如下:

| 值 (别名) | 数据连接 | Wifi 连接 | 飞行模式 |

| ------------------ | ---- | ---- | ------------- |

| 0 (什么都没有) | 0 | 0 | 0 |

| 1 (飞行模式) | 0 | 0 | 1 |

| 2 (只有Wifi) | 0 | 1 | 0 |

| 4 (只有数据连接) | 1 | 0 | 0 |

| 6 (开启所有网络) | 1 | 1 | 0 |

7.scroll(起始元素,结束元素)
driver.scroll(origin_el,destination_el)

8.获得当前页面的所有元素
driver.page_source

这可以用来判断元素是否存在,例如(assert “发布成功” in driver.page_source)

9.补充一些driver启动时可能用到的项
其实这些在上一篇启动里都有介绍,但是有些可能大家没注意到的点再列一下。这些点也是我在测试中实际遇到的点

autoLaunch :Appium是否要自动启动或安装app,默认true

desired_caps[‘autoLaunch’] = ‘false’

有的时候我不想让appium每次都启动app,想自己去启动activity,那这个项这时就可以起作用了

noReset:在会话前是否重置app状态。默认是false

desired_caps[‘noReset’] = ‘true’

newCommandTimeout:设置未接收到新命令的超时时间,默认60s

如果60s内没有接收到新命令,appium会自动断开连接,如果我需要很长时间做driver之外的操作,可能延长接收新命令的超时时间

desired_caps[“newCommandTimeout”]=1800

======================================================================

二、TouchAction类

将一系列的动作放在一个链条中,然后将该链条传递给服务器。服务器接受到该链条后,解析各个动作,逐个执行

短按(press)

长按(longPress)

点击(tap)

移动到(move_to) x,y为相对上一个坐标的移动距离

等待(wait)

释放(release)

执行(perform)

取消(cancel)

每个元素都有开始和结束坐标。(也就是这个元素在屏幕中个位置)

参考地址:https://www.cnblogs.com/yitao326/p/13718618.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多测师软件测试培训师肖sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值