2015-03-01 7 views
9

Sto avviando un'app già installata utilizzando appium.Come "attendere all'attività" usando Appium, all'inizio e durante il test stesso?

Dopo l'inizializzazione del driver. Come faccio a farlo sondare-aspettare fino a quando viene visualizzata determinate attività?

ho visto solo in questo modo di aspettare per l'attività all'avvio

cap.setCapability("app-wait-activity", "activity-to-wait-for");

C'è qualche altro modo? Come posso attendere un'altra attività specifica quando non si sta inizializzando. Dite dopo un clic del tasto?

solo sleep x seconds?

risposta

11

Attività specifica indica che viene visualizzato un elemento specifico. Io uso il seguente codice di attendere fino a qualche elemento certo sullo schermo:

WebDriverWait wait = new WebDriverWait(driver, 30); 
wait.until(ExpectedConditions.elementToBeClickable(By 
     .xpath("//android.widget.Button[contains(@text, 'Log In')]"))); 

o:

WebDriverWait wait = new WebDriverWait(driver, 30); 
wait.until(ExpectedConditions.presenceOfElementLocated(By 
      .xpath("//android.widget.TextView[contains(@resource-id, 'action_bar_title')]"))); 
1

Inoltre si potrebbe fare uso di quanto segue:

getDriver().manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 

o semplicemente :

o qualcosa del genere:

Thread.sleep(5000); 
2

Ti suggerisco di utilizzare WebDriverWait. Thread.sleep() non è un buon modo per utilizzare nel vostro script di test

1
WebDriverWait wait = new WebDriverWait(driver,20); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("about_me"))); 

Se desiderate conoscere in dettaglio come attesa implicita ed esplicita può essere utilizzato in Appium quindi visitare questo TUTORIAL

0

Si può essere fatto in modi diversi usando l'elemento. Webdriver fornisce le classi "WebDriverWait", "ExpectedCondition" per implementare questo. classe ExpectedConditions fornire un insieme di condizioni predefinire aspettare elementi come:

  1. elementSelectionStateToBe: uno stato elemento è selezione.
  2. elementToBeClickable: un elemento è presente e selezionabile.
  3. elementToBeSelected: elemento è selezionato
  4. frameToBeAvailableAndSwitchToIt: telaio è disponibile e telaio
  5. selezionato. invisibilityOfElementLocated: un elemento è invisibile
  6. presenceOfAllElementsLocatedBy: elemento presente localizzato da.
  7. aggiornato: attendere una condizione particolare durante l'aggiornamento della pagina.
  8. textToBePresentInElement: testo presente su un particolare
  9. textToBePresentInElementValue elemento: e l'elemento valore attuale per un particolare elemento
    .e molti altri Potete saperne di più modi per implementare attesa implicita ed esplicita passando attraverso questo url: http://roadtoautomation.blogspot.in/2013/10/webdriver-implicit-and-explicit-wait.html

Speranza che aiuta ...

1
long startTime = System.currentTimeMillis(); 
while(System.currentTimeMillis() - startTime < Time_Out) 
    if (getDriver().currentActivity().equals(activity)) 
     break; 
1

È possibile utilizzare il seguente codice per il polling l'attività corrente ogni secondo. Se si desidera ridurre il tempo di polling è possibile ridurre il tempo di sospensione a 500 e wait*2:

public void waitForActivity(String desiredActivity, int wait) throws InterruptedException 
{ 
    int counter = 0; 
    do { 
     Thread.sleep(1000); 
     counter++; 
    } while(driver.currentActivity().contains(desiredActivity) && (counter<=wait)); 

    log("Activity appeared :" + driver.currentActivity(), true); 
} 
Problemi correlati