TouchAction是Appium的辅助类,主要针对手势操作,比如滑动、长按、拖动等。针对最新版本(5.0.4)已不支持swipe等方法,所以可以用TouchAction类来封装成新的swipe方法。
开始按压一个元素或坐标点(x,y)。通过手指按压手机屏幕的某个位置。
格式:
press(self, el=None, x=None, y=None)
press也可以接收屏幕的坐标(x,y)。
实例:
TouchAction(driver).press(x=0,y=308).release().perform()
开始按压一个元素或坐标点(x,y)。 相比press()方法,longPress()多了一个入参duration,应为需要长按,所以须有一个按的时间。它以毫秒为单位。1000表示按一秒钟。其用法与上面的press()方法相同。
格式:
longPress(self, el=None, x=None, y=None, duration=1000)
实例:
TouchAction(driver).longPress(100,300,10000).release().perform()
对一个元素或控件执行点击操作。
格式:
tap(self,el=None, x=None, y=None,count=1)
实例:
TouchAction(driver).tap(200 ,200).perform().release()
将指针(光标)从上一个点移动到指定的元素或点。
格式:
moveTo(self,el=None, x=None, y=None)
实例:
TouchAction(driver).press(x=256,y=591).wait(1000)\
.move_to(x=546,y=540).wait(1000)\
.move_to(x=835,y=869).wait(1000)\
.move_to(x=568,y=1151).wait(1000)\
.release().perform()
暂停脚本的执行,单位为毫秒。
格式:
wait(self,ms=0)
实例:
TouchAction(driver).wait(1000)
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
from time import sleep
desired_caps={
'platformName':'Android',
'platformVesion':'6.0.1',
'deviceName':'127.0.0.1:21305',
'appPackage':'com.mymoney',
'appActivity':'com.mymoney.biz.main.v12.MainActivityV12',
'noReset':False
}
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
driver.implicitly_wait(10)
try:
driver.find_element_by_id("com.mymoney:id/confirmBtn").click()
driver.find_element_by_xpath("//*[@text='允许']").click()
driver.find_element_by_xpath("//*[@text='允许']").click()
except Exception as e:
pass
driver.find_element_by_id("com.mymoney:id/nav_btn_forth").click()
#实现向上滑动操作
def swipetestup():
x=driver.get_window_size()['width']
y=driver.get_window_size()['height']
x1=x*0.5
y1=y*0.9
y2=y*0.1
driver.swipe(x1,y1,x1,y2,5000)
swipetestup()
sleep(1)
driver.find_element_by_xpath("//*[@text='高级功能']").click()
driver.find_element_by_id("com.mymoney:id/password_protect").click()
driver.find_element_by_xpath("//*[@text='手势密码']").click()
for i in range(2):
TouchAction(driver).press(x=256,y=591).wait(1000)\
.move_to(x=546,y=540).wait(1000)\
.move_to(x=835,y=869).wait(1000)\
.move_to(x=568,y=1151).wait(1000)\
.release().perform()
注意:
本例中还用到了别外两个新方法。
release() 结束的行动取消屏幕上的指针。
perform() 执行的操作发送到服务器的命令操作。
实例场景:
在头条上按照元素来实现频道移动
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from time import sleep
desired_caps={
'platformName':'Android',
'platformVesion':'6.0.1',
'deviceName':'127.0.0.1:21305',
'appPackage':'com.ss.android.article.news',
'appActivity':'com.ss.android.article.news.activity.MainActivity',
'noReset':False
}
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
sleep(1)
driver.find_element_by_id("com.ss.android.article.news:id/ahy").click()
driver.find_element_by_id("com.ss.android.article.news:id/aig").click()
ele=driver.find_element_by_xpath("//*[@text='NBA']")
ele1=driver.find_element_by_xpath("//*[@text='热点']")
TouchAction(driver).long_press(ele,10000).move_to(ele1).wait(1000).release().perform()