2013-07-18 6 views
7

Testuję aplikację na iOS i nie mogę wchodzić w interakcje z elementami po zalogowaniu, ponieważ Appium idzie zbyt szybko.Czekaj na załadowanie elementu podczas testowania aplikacji na iOS przy użyciu Appium i Ruby?

Czy ktoś może wskazać mi przykład użycia stylu WebDriverWait w oczekiwaniu na testy Appium iOS? Najlepiej w Ruby.

Dzięki.

+0

Szuka dokładnie to samo albo w Ruby lub js. – jdrm

+0

Też szukam tego samego. Dla Androida coś takiego jak "browser.driver.manage.timeouts.page_load = 30" wydaje się działać. W systemie iOS pojawia się błąd informujący, że Appium nie zaimplementował tego ... –

Odpowiedz

13

ten pracował dla mnie, ale jestem nowy w 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

Sprawdziło się dobrze dla mnie. Dzięki!! – bkone

+1

Jest to dobry przykład, jeśli masz pewność, że element załaduje się w ciągu 10 sekund. W przeciwnym razie (np. Nazwa ulegnie zmianie lub nie będzie wystarczająco dużo czasu) zostanie zgłoszony wyjątek Selenium :: WebDriver :: Błąd :: NoSuchElementError: Nie znaleziono elementu i należy go jakoś uratować. – Clergyman

+0

'sleep (10)' jest podobne do tego. Czym to się różni? –

3

Używam tego rozwiązania w appium Java:

  • Thread.sleep(1000);

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

5

Oto ten, który wymyśliłem, ale w języku Java. Trochę wyciągnięty, ale przechodzi przez to, jak powinien czekać. To zajmie czas oczekiwania w sekundach, a następnie sprawdź co sekundę, aby zobaczyć, czy element jest jeszcze obecny. Po zlokalizowaniu elementu upewnia się, że jest widoczny, aby można było z nim współdziałać. "driver" to oczywiście obiekt 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

Nie ruby ​​na pytanie, ale byłem po Jawie, więc jestem szczęśliwy;) –

5

używam tej konstrukcji czekać pojawia się jakiś element:

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

Oczywiście, można znaleźć nie tylko przez :xpath.

Ponadto można ustawić timeout:

wait_true(timeout) { exists { find_element(:xpath, path_to_element) } } 
Powiązane problemy