2015-03-25 61 views
0

我有一个应用程序,它的作品这样的方式:当我点击&举办一些元素,上下文菜单显示,然后我可以在我的手指移动到指定的元素,并释放它适当的菜单项。我试着用Appium实现这个逻辑,但是失败了。Appium新闻MOVE_TO元素

起初,我试图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,也尚未出现。

那么,请告诉我,我怎么能实现neccessary逻辑是什么?

+0

你是否已经实现了这个?我面临着同样的情况,但考虑到你的情况,是否有内置的'长按'功能? – 2017-04-12 07:01:19

回答

0

不知道关于Ruby但在Java首先你release()之前perform()。另外,如果这不起作用,请查看duration()方法是否可用于Ruby。那么你应该使用像出头:

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

在情况下,如果你没有找到时间的方法,那么它在Appium的错误是什么,他们正在努力。看看这个:

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

+0

我想'Appium :: TouchAction.new.press(元素:my_elem).move_to(元素:文本(...))。release.perform' 但结果是一样的,在第二种情况:'硒:: webdriver的::错误:: NoSuchElementError'。 'move_to'中的元素搜索过早,我认为它会产生这个错误。 – Dmitry 2015-03-25 18:50:46

+0

'持续时间“是做什么的?在Ruby中有一个'long_press'方法,它有'element'和'duration'选项。但它仍然不起作用。 – Dmitry 2015-03-25 18:55:07

+0

元素是您的TouchAction类的变量。 longPress,放一些持续时间,释放()然后执行。这应该工作 – Gaurav 2015-03-26 18:37:23

0

试试这个:

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

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

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

这可能看起来有点不同,但是您的想法是一样的。通过后,请致电move_to,如果失败,那么您的元素可能无法访问。

0

如果问题是像你说的,

But it fails with Selenium::WebDriver::Error::NoSuchElementError: No element found, because element, where we move_to, didn't appeared yet.

那就试试这个

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

那么你可以做这样的事情

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

你可能有这个适应你的情况,我只是想告诉你这个想法,你可以阅读更多关于这个here