2013-07-18 7 views
7

Sto testando un'app per iOS e non posso interagire con gli elementi dopo l'accesso perché Appium sta andando troppo veloce.Attendi il caricamento dell'elemento durante il test di un'applicazione iOS utilizzando Appium e Ruby?

Qualcuno può indicarmi un esempio di utilizzo di uno stile di WebDriverWait in attesa del test Appium per iOS? Preferibilmente in Ruby.

Grazie.

+0

cercando esattamente la stessa cosa sia in Ruby o js. – jdrm

+0

Sto anche cercando la stessa cosa. Per Android, qualcosa come 'browser.driver.manage.timeouts.page_load = 30' sembra funzionare. Su iOS appare un errore che dice che Appium non ha implementato quello ... –

risposta

13

Questo ha funzionato per me, ma io sono nuovo di Appium

#code that navigated to this page 
wait = Selenium::WebDriver::Wait.new :timeout => 10 
wait.until { @driver.find_element(:name, 'myElementName').displayed? } 
#code that deals with myElementName 
+0

Ha funzionato bene per me. Grazie!! – bkone

+1

Questo è un buon esempio se si è certi che l'elemento si carichi in 10 secondi. In caso contrario (ad esempio, il nome modificato o non abbastanza tempo) verrà generata eccezione Selenium :: WebDriver :: Errore :: NoSuchElementError: Nessun elemento trovato e dovresti salvarlo in qualche modo. – Clergyman

+0

'sleep sleep (10)' è simile a questo. Come è diverso? –

3

Io uso questa soluzione in appium java:

  • Thread.sleep(1000);

  • WebDriverWait wait = new WebDriverWait(driver, 30); wait.until(ExpectedConditions.elementToBeClickable(By.name("somename")));

5

Ecco quello che ho inventato, ma in Java. Un po 'tirato fuori ma ti guida attraverso come dovrebbe aspettare. Ci vorrà un tempo di attesa in secondi e poi controllare ogni secondo per vedere se l'elemento è ancora presente. Una volta individuato l'elemento, si assicura che sia visibile in modo che possa essere interagito con esso. "driver" è ovviamente l'oggetto WebDriver.

public void waitForVisible(final By by, int waitTime) { 
    wait = new WebDriverWait(driver, timeoutInSeconds); 
    for (int attempt = 0; attempt < waitTime; attempt++) { 
     try { 
      driver.findElement(by); 
      break; 
     } catch (Exception e) { 
      driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS); 
     } 
    } 
    wait.until(ExpectedConditions.visibilityOfElementLocated(by)); 
} 
+0

Non è rubino come chiesto, ma io ero dopo Java quindi sono felice;) –

5

Io uso questa costruzione aspettare appare qualche elemento:

wait_true { exists { find_element(:xpath, path_to_element) } } 

Naturalmente, è possibile trovare non solo da :xpath.

Inoltre è possibile impostare il timeout:

wait_true(timeout) { exists { find_element(:xpath, path_to_element) } } 
Problemi correlati