控制屏幕2
driver.lock(秒)
driver.background_app(秒)
。
。
。
--------------------------------------------------------------------------------
f rom appium.webdriver.common.touch_action import TouchAction
TouchAction类提供的触摸动作的操作的常用方法:
TouchAction(driver).press().move_to().wait(1000).move_to().release().perform()
方法参数:
使用坐标位置定位九宫格代码例子:
我们在使用APP时有上面4中滑动方式,我们需要 把手机屏幕看成一个坐标系,需要注意的是屏幕的x,y是从左上角开始取的,左上角是坐标原点(0,0),右下角是最大的。
(x1,y1)是原始位置,(x2,y2)是滑动到的位置,t是滑动持续时间(单位是毫秒)
切换到webview后就能像web页面那样操作元素了:http://blog.csdn.net/jojoy_tester/article/details/53453888
注意:操作完webview后,也需要切换APP原生的context才能操作APP。
--------------------------------------------------------------------------------
锁定屏幕3
相当于按下熄灭手机屏幕键,将不能继续运行脚本。driver.lock(秒)
将APP至于后台3
相当于按下Home键,把应用放到后台去driver.background_app(秒)
。
。
。
--------------------------------------------------------------------------------
触摸动作(TouchAction)3
webdriver中对触摸操作的方法封装在TouchAction类中,使用前需要先导入:f rom appium.webdriver.common.touch_action import TouchAction
TouchAction类提供的触摸动作的操作的常用方法:
- press(坐标、元素) 短按
- move_to(坐标、元素) 移动到下一个点
- release() 松开
- perform() 提交全部动作,执行TouchAction类中存储的全部行为
- tap(坐标、元素) 点击
- wait(毫秒) 等待,毫秒
- long_press(坐标、元素) 长按
TouchAction(driver).press().move_to().wait(1000).move_to().release().perform()
方法参数:
- press(int x,int y)需要指定一个对象,传入元素或元素的坐标位置;
- press(e)
- move_to(int x,int y)同样传入操作的元素,无法获取元素时用坐标操作;
- move_to(e)
- wait(int) 滑动等待,毫秒
move_to()函数里面的坐标位置是在上一个目标位置的基础上进行坐标位置变化的!
所以模拟的操作是:
- 从一个点滑动到另一个点,松开---》滑动解锁;
- 多点滑动,松开----》解锁九宫格;
- 长按屏幕操作;
- 点击屏幕操作;
九宫格:
使用坐标位置定位九宫格代码例子:
from appium.webdriver.common.touch_action import TouchAction
from appium import webdriver
。。。。。。
#滑动解锁
#TouchAction(driver).press(x=143,y=566).move_to(x=356,y=566).move_to(x=566,y=566).move_to(x=566,y=777).move_to(x=566,y=992).release().perform()
TouchAction(driver).press(x=143,y=566).wait(2000).move_to(x=213,y=0).wait(3000).move_to(x=213,y=0).move_to(x=0,y=211).move_to(x=0,y=211).release().perform()
driver.find_element_by_id('com.icbc:id/adp_button2').click()
#退出登录
driver.find_element_by_id('com.icbc:id/exit_btn').click()
driver.find_element_by_id('com.icbc:id/adp_button1').click()
#重新登录
driver.find_element_by_id("com.icbc:id/relogin_btn").click()
#滑动解锁
TouchAction(driver).press(x=140,y=550).move_to(x=213,y=0).move_to(x=213,y=0).move_to(x=0,y=263).move_to(x=0,y=263).move_to(x=0,y=263).release().perform()
driver.find_element_by_id('com.icbc:id/adp_button2').click()
driver.quit()
另外,九宫格不是一个view,是一个个元素,可以定位的话,定位比较好的方法:
- driver.find_elements_by_id('九宫格')===》是一个list;
- 通过列表的索引方法可以定位里面每一个格子;
多点触控(Multi TouchAction)3
MultiTouch 对象是触摸操作的集合。
多点触控手势只有两个方法,添加 (add) 和执行 (perform) 。
add 用于将不同的触摸操作添加到一个多点触控中。
当 perform 被调用的时候,所有被添加到多点触摸中的触摸事件会被发送到appium并且被执行,就像它们同时发生一样。Appium会执行“触摸事件”中的第一个事件,然后第二个,以此类推。
用两只手指点击的代码示例:
action0 = TouchAction().tap(el)
action1 = TouchAction().tap(el)
MultiAction().add(action0).add(action1).perform()
--------------------------------------------------------------------------------
swipe滑动页面3
定位元素时,我们需要查找的元素不在当前屏幕时。如果 是web页面的,也可以直接定位(除了iframe那种),但是APP的话,只能定位到当前页面的元素。所以,APP需要滑动。滑动方式4
滑动方式有:向上、向下、向左、向右。我们在使用APP时有上面4中滑动方式,我们需要 把手机屏幕看成一个坐标系,需要注意的是屏幕的x,y是从左上角开始取的,左上角是坐标原点(0,0),右下角是最大的。
滑动函数4
driver.swipe(x1,y1,x2,y2,t)(x1,y1)是原始位置,(x2,y2)是滑动到的位置,t是滑动持续时间(单位是毫秒)
- x不变,y值变化======》上下滑动
- y值不变,x变化======》左右滑动
获取屏幕大小4
上面的swipe函数直接填入坐标其实也能滑动了,但是每次都需要填入坐标很麻烦,可以通过获取屏幕的大小按比例滑动。x = driver.get_window_size()['width'] # 获取屏幕的宽度,x的最大值
y = driver.get_window_size()['height'] # 获取屏幕的高度,y的最大值
滑动的封装函数4
封装成一个类,实例化后可以调用。class TestSwipe():
def __init__(self,driver):
self.driver = driver
def getsize(self):
x = self.driver.get_window_size()['width']
y = self.driver.get_window_size()['height']
return (x,y)
#向上滑动(x值不变,y由大变小)
def swipeup(self,t):
l = self.getsize()
x1 = int(l[0]*0.5)
y1 = int(l[1]*0.8)
y2 = int(l[1]*0.3)
return self.driver.swipe(x1,y1,x1,y2,t)
#向下滑动(x值不变,y值由小变大)
def swipedown(self,t):
l = self.getsize()
x1 = int(l[0]*0.5)
y1 = int(l[1]*0.25)
y2 = int(l[1]*0.8)
return self.driver.swipe(x1,y1,x1,y2,t)
#向左滑动(y值不变,x值由大变小)
def swipeleft(self,t):
l = self.getsize()
y = int(l[1]*0.5)
x1 =int(l[0]*0.8)
x2 =int(l[0]*0.1)
return self.driver.swipe(x1,y,x2,y,t)
#向右滑动(y值不变,x值由小变大)
def swiperight(self,t):
l = self.getsize()
y = int(l[1]*0.5)
x1 = int(l[0]*0.2)
x2 = int(l[0]*0.8)
return self.driver.swipe(x1,y,x2,y,t)
--------------------------------------------------------------------------------
切换webview3
driver.switch_to.context('webview的名称')
webviews = driver.contexts #获取所有的contexts,是一个list
driver.switch_to.context(webviews[-1]) # 切换webview,下面就能定位webview里面的元素
webviews是一个列表,在这个list里面有两个元素“NATIVE_APP”,“WEBVIEW_cn_com_open_mooc”,
第一个元素是原生的app的contexts,后面的则是webview的context。
切换到webview后就能像web页面那样操作元素了:http://blog.csdn.net/jojoy_tester/article/details/53453888
注意:操作完webview后,也需要切换APP原生的context才能操作APP。
--------------------------------------------------------------------------------