我有一个应用程序,它的工作方式是:当我点击并按住某个元素时,会显示上下文菜单,然后我可以将手指移动到指定的元素并将其释放到相应的菜单项上。我尝试用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,但在java首先你release()
它在perform()
之前。此外,如果这不起作用,请查看Ruby中是否可以使用duration()方法。然后你应该使用像这样的东西:
element.longPress.duration.release.perform();
如果你没有找到持续时间方法,那么它是Appium中的一个错误。看这个:
试试这个:
driver.scrollTo("string").tap(1,2000);
首先,确保您想要移动的元素真的可以访问。如果是,但在调用方法之前没有出现,那么你应该等到元素出现。这是java中的一个示例
WebDriverWait wait = new WebDriverWait(driver, 120);
wait.until(ExpectedConditions.presenceOfElementLocated(locator));
在您的情况下,这可能看起来有点不同,但想法是一样的。在它通过之后,然后调用move_to
,如果它失败则可能你的元素无法访问。
如果问题就像你说的那样,
但它失败了Selenium :: WebDriver :: Error :: NoSuchElementError:找不到元素,因为我们move_to的元素还没有出现。
然后尝试这个
wait = Selenium::WebDriver::Wait.new :timeout => 10
然后你可以做这样的事情
wait.until { moveTo(element: text(...)) } ...
您可能必须根据您的情况进行调整,我只是想向您展示这个想法,您可以阅读更多有关此here的信息