2013-01-24 20 views
5

Wysyłam niektóre klucze do pola wejściowego. Kiedy fokus zostanie usunięty z tego elementu, żądanie ajax jest wysyłane do serwera, jeśli wprowadzona wartość jest poprawna. Jeśli tak, nic się nie dzieje, jeśli nie pojawi się komunikat o błędzie. Istnieje kilka z tych pól.Ajax Selenium czekać, czy Ajax nie zwraca żadnych elementów?

Kiedy mówię:

driver.findElementById(firstId).sendKeys(firstValue); 
driver.findElementById(secondId).sendKeys(secondValue); 

Druga wartość nie zostanie wysłana do drugiego elementu, ponieważ nie będzie bardzo krótki żądania ajax w tym czasie. Ale ponieważ wartość jest w porządku (firstValue) nie wyświetli żadnego tekstu ani niczego innego.

Jak mogę powiedzieć, aby Selenium czekał na zakończenie tej ajax? Nie chcę używać Thread.sleep.

+1

Można użyć selenu: Implicit wait i Explicit wait. – Manigandan

+0

@Manigandan Co to jest implicit wait i Expilicit wait? –

Odpowiedz

7

Selen nie będzie czekać na załadowanie AJAX. Automatycznie oczekuje na załadowanie strony. Aby poczekać na załadowanie typu AJAX, należy użyć opcji oczekiwania na niejawne i jawne.

Można użyć opcji Implicit Wait i Explicit Wait, aby poczekać na określony element sieci Web, dopóki nie pojawi się na stronie. Okres oczekiwania, który można zdefiniować i który jest zależny od aplikacji.

Explicit Wait:

An wyraźne oczekiwania jest kod zdefiniować czekać na pewien warunek, aby wystąpić przed przejściem dalej w kodzie. Jeśli osiągnięty warunek zakończy to oczekiwanie i przejdą dalsze kroki.

Kod:

WebDriverWait wait = new WebDriverWait(driver,30); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(strEdit))); 

Albo

WebElement myDynamicElement = (new WebDriverWait(driver, 30)) 
.until(new ExpectedCondition<WebElement>(){ 
@Override 
public WebElement apply(WebDriver d) { 
return d.findElement(By.id("myDynamicElement")); 
}}); 

to czeka się do 30 sekund przed wyrzuceniem TimeoutException lub jeżeli stwierdzi, że element będzie zwrócić go w 0 - 30 sekund. WebDriverWait domyślnie wywołuje ExpectedCondition co 500 milisekund, dopóki nie zwróci pomyślnie. Pomyślnie zwrócony jest dla typu ExpectedCondition jest Boolean zwraca true lub nie ma wartości zwracanej dla wszystkich pozostałych typów ExpectedCondition.

Możesz użyć klasy ExpectedConditions zgodnie z potrzebami aplikacji.

niejawny Wait:

Pośrednia oczekiwania jest powiedzieć WebDriver odpytywanie DOM przez pewien okres czasu, próbując znaleźć element lub elementy, o ile nie są one natychmiast dostępne

Code :

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 

Jedno pamiętać, jest to, że gdy domniemane oczekiwania jest ustawiony - pozostanie on na życiu obj WebDriver ect instancja

Aby uzyskać więcej informacji Użyj tego linku http://seleniumhq.org/docs/04_webdriver_advanced.jsp

You can use these waits during your AJAX loading.

Mam nadzieję, że to będzie pomocne.

+0

Dzięki. Więc muszę poczekać jakiś czas? Stać się AJAX w mojej sytuacji nie czyni żadnego elementu widocznym ani niewidzialnym .. –

+0

Dobrze. Jeśli ta odpowiedź rozwiąże problem, oznacz go jako zaakceptowany. – Manigandan

+0

To naprawdę nie .. –

Powiązane problemy