2015-03-23 18 views
12
  1. Ho provato con le codifiche seguenti per lo scorrimento.
  2. Durante l'esecuzione del test case, l'azione di scorrimento non si verifica e inoltre non ricevo alcun messaggio di errore.
  3. Come posso scorrere da entrambi i lati da sinistra a destra e viceversa.

Ci sono due metodi che sono i seguenti: -Come eseguire l'azione di scorrimento in Selendroid?

Metodo 1 (utilizzando 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(); 

Metodo 2 (utilizzando JavaScript): -

public static void swipe(WebDriver driver) { 

      JavascriptExecutor js = (JavascriptExecutor) driver; 
      HashMap<String, Double> swipeObject = new java.util.HashMap<String, Double>(); 
      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); 
     } 

risposta

0

Un motivo comune per le azioni che non funzionano completamente quando testano funzionalmente i siti Web pesanti di JavaScript è che le azioni vengono eseguite prima che il sito abbia inizializzazione innata. Il modo più semplice per testare questo è il caso di aggiungere un breve sonno prima di eseguire l'azione. Dì 2 secondi.

Se questo risolve il problema, allora sai di avere una condizione di competizione tra l'inizializzazione della pagina e il codice di test in esecuzione.

A quel punto è possibile rewrite your code to wait for the action to be possible.

1

Prova a seguire attuazione che inlcudes norma FlickAction.SPEED_NORMAL argomento e anche costruttore azione per 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(); 

Scorrendo da sinistra a destra e viceversa può essere effettuato variando X-asis coordinate:

  • Swipe a sinistra:

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

  • Swipe a destra:

film d'azione = getBuilder (driver()) flick (toFlick, , 0, FlickAction.SPEED_NORMAL) .build();.

  • Swipe all'inizio:.

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

  • striscia a fondo.

Action flick = getBuilder (driver()) flick (toFlick, 0, -500, FlickAction.SPEED_NORMAL).costruire();

+0

Qual è il metodo getBuilder qui? – karan

+0

Siamo spiacenti, ho dimenticato di aggiungere il codice per getBuilder. Verifica l'ultima versione della risposta –

+0

Ho provato la tua risposta. Ma non ha eseguito lo scorrimento o alcuna azione su quel particolare codice. – karan

0

So che questa è una vecchia domanda, ma ho riscontrato un numero di problemi simili con questo.

Come altri hanno sottolineato, è generalmente una cosa di temporizzazione. Così ho scoperto che se aspettavo che un elemento fosse presente (cioè il driver ha restituito il controllo e la pagina è stata renderizzata), e poi ha fatto un breve sonno prima e dopo l'azione di scorrimento, funziona, sicuramente su ogni pagina/app l'ho provato con. Quindi il nostro codice assomiglia un po 'a questo:

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); 
}