Appium (已解决) appium+python:关于按键的长按问题 long_press

付兰 · 2016年03月07日 · 最后由 Mr.Yang 回复于 2019年10月22日 · 3694 次阅读

环境是:appium 1.4.16+python
目前网上查的代码是:

action1 = TouchAction(self.driver)
el = self.driver.find_element_by_id('XXXXX1')
action1.long_press(el).wait(10000).perform()

action2 = TouchAction(self.driver)
el = self.driver.find_element_by_id('XXXXX2')
action2.moveTo(el).release().perform()

按照上面的代码没有实现长按,貌似是 0.2s 的时间,不是 10s,然后我自己获取控件然后再获取坐标来定位的,
按照下面两个方法执行:
第一种:

from selenium.webdriver.common.touch_actions import TouchActions
action1=TouchActions(driver)
el = driver.find_element_by_id(" ")
elx=el.location.get('x')
ely=el.location.get('y')
action1.tap_and_hold(elx,ely).perform()
time.sleep(3)
action1.release(elx,ely).perform()

第二种:

el = driver.find_element_by_id(" ")
elx=el.location.get('x')
ely=el.location.get('y')
driver.swipe(elx,ely,elx,ely,duration)

请问对于 action1.long_press(el).wait(10000).perform() 到底能不能执行,看了社区一个帖子有人说可以,但是我实际操作起来不行,还有人回答修改默认的 duration 的,如果不修改就用 action1.long_press(el).wait(10000).perform() 到底要怎样才可以执行才按,谢谢

目前修改成:action1.long_press(el ,None,None,10000).perform() 就可以了,
参照这个方法我就可以用 tap 多次点击了:action1.tap(el,None,None,2).perform()

共收到 14 条回复 时间 点赞
def long_press(self, el=None, x=None, y=None, duration=1000):
        """Begin a chain with a press down that lasts `duration` milliseconds
        """
        self._add_action('longPress', self._get_opts(el, x, y, duration))

        return self

你的 long_press 的用法不对吧。 你只传 el 的话默认是 1 秒

#1 楼 @zsx10110 什么意思,难道还要传 el 的 x、y 吗

#2 楼 @a3096556718

action1.long_press(el,None,None,10000).perform()

试试这样 我没验证。

#3 楼 @zsx10110 可以,谢谢你了

我的在 win 7 + android 照网上的那样,是可用的额。

#5 楼 @t880216t 我也是 win7 啊,不知道为啥我的不可以

第二种方法 NB 啊

el = driver.find_element_by_id(" ")
elx=el.location.get('x')
ely=el.location.get('y')
driver.tap([(elx,ely)],duration)

#8 楼 @kesha0 tap+duration 其实调用的就是 long_press

@zsx10110 请问有没有方法,长按返回键,设置时间长度。long_press 方法只能长按界面 UI

self.driver.execute_script("mobile: tap", {"tapCount": 1, "touchCount": 1, "duration": 2, "x": 181, "y": 192 })
长按手势 mac 上录制的代码可以使用

@heminwon 我说的是 android 的返回键长按操作,源码里的方法 long_press 方法不管用

@a3096556718
我用你的方法时候报错
org.openqa.selenium.WebDriverException: Method has not yet been implemented (WARNING: The server did not provide any stacktrace information)
主要是 perform() 这个方法

14楼 已删除

def long_press(self, element, duration):
def center_rect(r):
center_x = r['x'] + r['width'] / 2.0
center_y = r['y'] + r['height'] / 2.0
return center_x, center_y

duration = duration * 10000
center = center_rect(element.rect)
self.driver.tap([center], duration=duration)

尝试了以上所有的方法, 发现一个本质的错误, 点击位置在元素的左上角,所以导致长按等操作无法触发。
将其改为中心后,问题解决

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册