Comment effectuer une action de balayage dans Selendroid?

  1. J’ai essayé avec les codages ci-dessous pour glisser.
  2. Lors de l’exécution du scénario de test, l’action de balayage ne se produit pas et aucun message d’erreur ne s’affiche.
  3. Comment puis-je glisser des deux côtés de gauche à droite et inversement.

Il existe deux méthodes qui sont les suivantes: –

Méthode 1 (à l’aide de TouchActions): –

1. //Swipe Right to Left side of the Media Viewer First Page WebElement firstPages = driver.findElement(By.id("media-list")); TouchActions flick = new TouchActions(driver).flick(firstPages,-100,0,0); flick.perform(); 2. //perform swipe gesture TouchActions swipe = new TouchActions(driver).flick(0, -20); swipe.perform(); 

Méthode 2 (en utilisant javascript): –

 public static void swipe(WebDriver driver) { JavascriptExecutor js = (JavascriptExecutor) driver; HashMap swipeObject = new java.util.HashMap(); swipeObject.put("startX", 0.95); swipeObject.put("startY", 0.5); swipeObject.put("endX", 0.05); swipeObject.put("endY", 0.5); swipeObject.put("duration", 1.8); js.executeScript("mobile: swipe", swipeObject); } 

Essayez de suivre l’implémentation qui inclut l’argument standard FlickAction.SPEED_NORMAL et également le générateur d’action pour le flick :

 import org.openqa.selenium.interactions.touch.FlickAction; private Action getBuilder(WebDriver driver) { return new Action(driver); } WebElement toFlick = driver().findElement(By.id("media-list")); Action flick = getBuilder(driver()).flick(toFlick, -500, 0, FlickAction.SPEED_NORMAL).build(); flick.perform(); 

Glisser de gauche à droite et vice versa peut être effectué en faisant varier les coordonnées X-asis:

  • Glissez vers la gauche:

Action coup = getBuilder (driver ()). Coup (toFlick, -500 , 0, FlickAction.SPEED_NORMAL) .build ();

  • Glissez vers la droite:

Action coup = getBuilder (driver ()). Coup (toFlick, 500 , 0, FlickAction.SPEED_NORMAL) .build ();

  • Glissez vers le haut:

Action coup = getBuilder (driver ()). Coup (toFlick, 0, 500 , FlickAction.SPEED_NORMAL) .build ();

  • Glissez vers le bas:

Action coup = getBuilder (driver ()). Coup (toFlick, 0, -500 , FlickAction.SPEED_NORMAL) .build ();

Une raison commune pour que les actions échouent complètement lors du test fonctionnel de sites Web JavaScript lourds est que les actions sont effectuées avant l’initialisation du site. Le moyen le plus simple de le vérifier consiste à append un court sumil avant d’exécuter l’action. Dis 2 secondes.

Si cela résout le problème, vous savez que vous avez une situation critique entre la page d’initialisation et l’exécution de votre code de test.

À ce stade, vous pouvez réécrire votre code pour attendre que l’action soit possible .

Je sais que la question est ancienne, mais j’ai rencontré un certain nombre de problèmes similaires.

Comme d’autres l’ont souligné, c’est généralement une question de timing. J’ai donc constaté que si j’attendais la présence d’un élément (le pilote a restitué le contrôle et la page rendue), puis un bref sumil avant et après l’action du coup, cela fonctionne, certainement sur chaque page / application. Je l’ai testé avec. Donc, notre code ressemble un peu à ceci:

 WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("some-element-id))); flickIt(driver, element -100, 0); private void flickIt(WebDriver driver, WebElement el, int x, int y) { SyntheticsUtility.sleep(500); // put 0.5s sleeps around it to make sure, need to be stable TouchActions touch = new TouchActions(driver); touch.flick(el, x, y, FlickAction.SPEED_NORMAL); touch.perform(); SyntheticsUtility.sleep(500); }