2015-03-25 62 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