Appium press和move_to元素

问题描述 投票:0回答:4

我有一个应用程序,它的工作方式是:当我点击并按住某个元素时,会显示上下文菜单,然后我可以将手指移动到指定的元素并将其释放到相应的菜单项上。我尝试用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的元素尚未出现。

那么,请告诉我,我如何实现必要的逻辑?

ruby appium
4个回答
0
投票

不确定Ruby,但在java首先你release()它在perform()之前。此外,如果这不起作用,请查看Ruby中是否可以使用duration()方法。然后你应该使用像这样的东西:

element.longPress.duration.release.perform();

如果你没有找到持续时间方法,那么它是Appium中的一个错误。看这个:

https://github.com/appium/appium/issues/4695


0
投票

试试这个:

driver.scrollTo("string").tap(1,2000);

0
投票

首先,确保您想要移动的元素真的可以访问。如果是,但在调用方法之前没有出现,那么你应该等到元素出现。这是java中的一个示例

WebDriverWait wait = new WebDriverWait(driver, 120);
wait.until(ExpectedConditions.presenceOfElementLocated(locator));

在您的情况下,这可能看起来有点不同,但想法是一样的。在它通过之后,然后调用move_to,如果它失败则可能你的元素无法访问。


0
投票

如果问题就像你说的那样,

但它失败了Selenium :: WebDriver :: Error :: NoSuchElementError:找不到元素,因为我们move_to的元素还没有出现。

然后尝试这个

wait = Selenium::WebDriver::Wait.new :timeout => 10

然后你可以做这样的事情

wait.until { moveTo(element: text(...)) } ...

您可能必须根据您的情况进行调整,我只是想向您展示这个想法,您可以阅读更多有关此here的信息

© www.soinside.com 2019 - 2024. All rights reserved.