2013-07-18 3 views
7

Ich teste eine iOS-App und kann nach der Anmeldung nicht mit den Elementen interagieren, weil Appium zu schnell geht.Warten, bis Element beim Testen einer iOS App mit Appium und Ruby geladen wird?

Kann mir bitte jemand ein Beispiel für die Verwendung eines WebDriverWait-Stils geben, der auf das Testen von Appium iOS wartet? Vorzugsweise in Ruby.

Danke.

+0

die Suche nach genau der gleichen Sache entweder in Ruby oder js. – jdrm

+0

Ich bin auch auf der Suche nach dem gleichen Ding. Für Android scheint etwas wie "browser.driver.manage.timeouts.page_load = 30" zu funktionieren. Auf iOS erscheint ein Fehler, der besagt, dass Appium das nicht implementiert hat ... –

Antwort

13

Das ist für mich gearbeitet, aber ich bin neu in 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

Gut für mich gearbeitet. Vielen Dank!! – bkone

+1

Dies ist ein gutes Beispiel, wenn Sie sicher sind, dass das Element in 10 Sekunden geladen werden soll. Andernfalls (z. B. der Name geändert, oder nicht genug Zeit) wird es Ausnahme Selenium :: WebDriver :: Fehler :: NoSuchElementError: Kein Element gefunden und Sie sollten es irgendwie retten. – Clergyman

+0

'Schlaf (10)' ist ähnlich. Wie ist das anders? –

3

Ich benutze diese Lösungen in appium java:

  • Thread.sleep(1000);

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

5

Hier ist der, den ich mir ausgedacht habe, aber in Java. Ein wenig herausgezogen, aber es führt Sie durch, wie es warten sollte. Es dauert eine Wartezeit in Sekunden und überprüft dann jede Sekunde, ob das Element noch vorhanden ist. Sobald es das Element gefunden hat, stellt es sicher, dass es sichtbar ist, damit es interagiert werden kann. "Treiber" ist offensichtlich das WebDriver-Objekt.

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

Nicht Ruby wie gefragt, aber ich war nach Java, also bin ich glücklich;) –

5

Ich benutze diese Konstruktion ein Element zu warten scheint:

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

Natürlich können Sie nicht nur von :xpath finden.

Sie können auch Timeout:

wait_true(timeout) { exists { find_element(:xpath, path_to_element) } } 
Verwandte Themen