2015-03-25 1 views
0

J'ai une application, et cela fonctionne de cette façon: quand je tape & tenir un élément, menu contextuel est montré, puis je peux déplacer mon doigt à l'élément spécifié et le relâcher sur l'élément de menu approprié. J'essaye d'implémenter cette logique avec Appium, mais ça a échoué.Appium presse et move_to élément

Au début, j'ai essayé press élément, puis une autre move_to:

Appium::TouchAction.new.press(element: my_elem).perform 
Appium::TouchAction.new.move_to(element: text(...)).perform 

Mais avant la deuxième action "doigts écran de presse" et le menu contextuel disparu. Alors j'ai essayé une autre façon:

Appium::TouchAction.new 
    .press(element: my_elem) 
    .move_to(element: text(...)) 
    .perform 

Mais il échoue avec Selenium::WebDriver::Error::NoSuchElementError: No element found, parce que l'élément, où l'on move_to, n'a pas encore paru. Alors, dites-moi s'il vous plaît, comment puis-je implémenter la logique nécessaire?

+0

Avez-vous déjà implémenté ceci? Je suis confronté au même scénario, mais compte tenu de votre cas, y a-t-il une fonction intégrée pour «appuyer longuement»? –

Répondre

0

Pas sûr de Ruby mais en Java d'abord vous release() il avant perform(). En outre, si cela ne fonctionne pas, regardez si la méthode duration() est disponible dans Ruby. Ensuite, vous devez utiliser somethings comme:

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

En cas si vous ne trouvez pas la méthode de la durée, puis son un bogue dans Appium ce qu'ils travaillent. Regardez ceci:

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

+0

J'ai essayé 'Appium :: TouchAction.new.press (élément: my_elem) .move_to (élément: texte (...)). Release.perform' mais le résultat est le même que dans le second cas:' Selenium :: WebDriver :: Error :: NoSuchElementError'. L'élément de recherche dans 'move_to' fonctionne trop tôt et il produit cette erreur, je pense. – Dmitry

+0

Que fait 'duration'? Il y a une méthode 'long_press' dans Ruby, et elle a les options' element' et 'duration'.Mais ça ne marche toujours pas. – Dmitry

+0

L'élément est votre variable de la classe TouchAction. longPress, mettez une certaine durée dessus, relâchez() puis effectuez. Cela devrait fonctionner – Gaurav

0

Essayez ceci:

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

Tout d'abord, assurez-vous que l'élément que vous voulez déplacer vers est vraiment accessible. Si c'est le cas mais qu'il n'est pas apparu avant d'appeler la méthode, alors vous devriez attendre que l'élément apparaisse. Ceci est un exemple dans Java

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

Cela peut sembler un peu différent dans votre cas, mais l'idée est la même. Après le passage, appelez le move_to, s'il échoue alors probablement votre élément n'est pas accessible.

0

Si le problème est comme vous l'avez dit,

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

Ensuite, essayez ce

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

alors vous pouvez faire quelque chose comme ça

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

Vous avez probablement adapter cela votre cas, je voulais juste vous montrer l'idée, vous pouvez en lire plus à ce sujet here