appium API 之 TouchAction 操作
一: TouchAction
1,手指操作
swipe 滑动
driver.swipe(300,900,300,900,1000)
注释:起始位置--》结束位置--》滑动时间
a:可通过获取屏幕driver.get_window_size() 尺寸进行滑动以免避免不同设备分辨率不同。
tap(element=None, x=None, y=None, count=1) 轻点击
from appium.webdriver.common.touch_action import TouchAction
if __name__ == '__main__':
driver = __init_driver()
try :
time.sleep(5)
ele =driver.find_element_by_xpath("//*[contains(@text,'应用市场')]")
TouchAction(driver).tap(ele).perform()
注释:
1, TouchAction要先导入此类 通过元素定位执行
2,通过by_xpath 获取参数传给tap 后传给Perform() 执行的操作发送到服务器的命令操作
TouchAction(driver).press(ele).wait(2000).move_to(x=100,y=100).wait(2000).release().perform()
即可拓展到一系列操作
通过坐标执行tap操作
TouchAction(driver).tap(x=ele.location.get("x"),y=ele.location.get("y")).perform()
press(el=None, x=None, y=None, pressure=None) 按
TouchAction(driver).press(ele).release().perform()
注释:长按-后release 释放 ,依次把这两个动作传给服务执行
long_press(self, el=None, x=None, y=None, duration=1000)
同样可传参定位元素,坐标,按压时间(毫秒)
wait(ms=0) 等待时间
release() 释放之前操作
perform() 传送服务执行
Perform the action by sending the commands to the server to be operated upon
可以点击进入类的解析查看类所包含方法
两种操作实现对多组定位元素的点击
try :
time.sleep(5)
driver.find_element_by_xpath("//*[contains(@text,'应用市场')]").click()
time.sleep(5)
ele = driver.find_elements_by_id('com.huawei.appmarket:id/lanternName')
for i in ele:
print(i.text)
if i.text == "分类":
print(i.text)
TouchAction(driver).tap(element=i,count=1).perform()
break #1,TouchAction 点击
if i.get_attribute("text") == "分类":
i.click()
break# 2,获取元素属性点击
操作实例:
点开应用市场-分类-点击实用工具到商务-然后右侧下滑-下滑-上滑动
import time
from selenium.webdriver.support.ui import WebDriverWait
from init_driver.init_Driver import __init_driver
from appium.webdriver.common.touch_action import TouchAction
def wait_driver(xpath):
return WebDriverWait(driver,5,0.5).until(lambda x: x.find_element_by_xpath(xpath))
if __name__ == '__main__':
driver = __init_driver()
try :
driver.implicitly_wait(2)
#点击打开应-用市场
driver.find_element_by_xpath("//*[contains(@text,'应用市场')]").click()
#显示等待进入分类
wait_driver("//*[contains(@text,'分类')]").click()
#点击实用工具
driver.find_element_by_xpath("//*[contains(@text,'实用工具')]").click()
#从社交通讯-滑动到-商务
s_ele = wait_driver("//*[contains(@text,'社交通讯')]")
e_ele = wait_driver("//*[contains(@text,'商务')]")
driver.drag_and_drop(e_ele,s_ele)
#按住(500,560)-(0,300)-(0,400)-(0,-500) 后面都是对于上一个左边的相对坐标
TouchAction(driver).press(x=500,y=560).wait(1000).move_to(x=0,y=300).wait(1000).move_to(x=0,y=400).wait(1000).move_to(x=0,y =-500).wait(100).release().perform()
except Exception as e :
print(e)
finally:
print(time.strftime("%H:%M:%S", time.localtime()))
driver.quit()
异常:
selenium.common.exceptions.TimeoutException: Message:
需要使用
def wait_driver(xpath):
return WebDriverWait(driver,5,0.5).until(lambda x: x.find_element_by_xpath(xpath))
否侧在driver.drag_and_drop(e_ele,s_ele) 运行可能会出现问题
资料
3-全功能pytest测试框架
https://blog.csdn.net/weixin_42914706/article/details/112300912