我有一个应用程序,它以这样的方式工作:当我点击&保持一些元素,显示上下文菜单,然后我可以将我的手指移动到指定的元素并将其释放到适当的菜单项上。我尝试用Appium实现这个逻辑,但它失败了。
首先,我尝试了press
元素,然后是另一个move_to
:
Appium::TouchAction.new.press(element: my_elem).perform
Appium::TouchAction.new.move_to(element: text(...)).perform
但在第二次行动之前"手指释放屏幕"和上下文菜单消失了。然后我尝试了另一种方式:
Appium::TouchAction.new
.press(element: my_elem)
.move_to(element: text(...))
.perform
但它失败了Selenium::WebDriver::Error::NoSuchElementError: No element found
,因为我们move_to
尚未出现的元素。
那么,请告诉我,我如何实施必要的逻辑?
答案 0 :(得分:0)
不确定Ruby,但在java release()
之前perform()
。此外,如果这不起作用,请查看Ruby中是否可以使用duration()方法。然后你应该使用像:
element.longPress.duration.release.perform();
如果你没有找到持续时间方法,那么它是Appium中的一个错误。看看这个:
答案 1 :(得分:0)
试试这个:
driver.scrollTo("string").tap(1,2000);
答案 2 :(得分:0)
首先,确保您想要移动的元素真的可以访问。如果是,但在调用方法之前没有出现,那么你应该等到元素出现。这是java中的一个示例
WebDriverWait wait = new WebDriverWait(driver, 120);
wait.until(ExpectedConditions.presenceOfElementLocated(locator));
在您的情况下,这可能看起来有点不同,但这个想法是一样的。传递之后,然后调用move_to
,如果失败则可能无法访问您的元素。
答案 3 :(得分:0)
如果问题就像你说的那样,
但它失败了Selenium :: WebDriver :: Error :: NoSuchElementError:找不到元素,因为我们move_to的元素还没有出现。
然后试试这个
wait = Selenium::WebDriver::Wait.new :timeout => 10
然后你可以做这样的事情
wait.until { moveTo(element: text(...)) } ...
您可能需要根据自己的情况进行调整,我只是想向您展示这个想法,您可以详细了解这个here