2013-01-24 13 views
5

Sto inviando alcune chiavi ad alcuni campi di input. Quando lo stato attivo viene rimosso da questo elemento, viene inviata una richiesta Ajax al server se questo valore inserito è valido. Se lo è, non succede nulla, se non si verifica un messaggio di errore. Ci sono un paio di questi campi.Selenium Ajax aspetta se Ajax non restituisce elementi?

quando dico:

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

Il secondo valore non verrà inviato al secondo elemento perché ci sarà un brevissimo richiesta AJAX nel frattempo. Ma dal momento che il valore è ok (firstValue) non verrà visualizzato alcun testo o altro.

Come posso dire al Selenium di aspettare che questo ajax finisca? Non voglio usare Thread.sleep.

+1

È possibile utilizzare l'attesa implicita del selenio e l'attesa esplicita. – Manigandan

+0

@Manigandan Che cos'è l'attesa implicita e Expilicit attendere? –

risposta

7

Il selenio non attenderà il caricamento di AJAX. Attende automaticamente il caricamento della pagina. Per attendere il caricamento del tipo AJAX devi utilizzare l'attesa implicita ed esplicita.

È possibile utilizzare Attendi impliciti ed Attendi espliciti per attendere un elemento Web particolare finché non viene visualizzato nella pagina. Il periodo di attesa che puoi definire dipende dall'applicazione.

Attendere esplicito:

Un attese esplicite è il codice si definisce di aspettare per una certa condizione che si verifichi prima di procedere ulteriormente nel codice. Se la condizione raggiunta, terminerà l'attesa e proseguirà con le ulteriori fasi.

Codice:

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

O

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

Questa attende fino a 30 secondi prima di lanciare un TimeoutException o se trova l'elemento tornerà in 0 - 30 secondi. WebDriverWait di default chiama la ExpectedCondition ogni 500 millisecondi finché non ritorna correttamente. Un risultato positivo per il tipo ExpectedCondition è Boolean return true o non null valore di ritorno per tutti gli altri tipi di ExpectedCondition.

È possibile utilizzare la classe ExpectedConditions come necessario per l'applicazione.

Attendere implicito:

un'attesa implicita è quella di dire WebDriver interroga il DOM per un certo periodo di tempo quando si cerca di trovare un elemento o gli elementi se non sono immediatamente disponibili

Codice :

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

una cosa da tenere a mente è che una volta che l'attesa implicita è impostata - rimarrà per la vita del obj WebDriver ect esempio

Per maggiori informazioni utilizza questo link http://seleniumhq.org/docs/04_webdriver_advanced.jsp

You can use these waits during your AJAX loading.

Spero che questo sarà utile.

+0

Grazie. Quindi devo aspettare un po 'di tempo? Beccare AJAX nella mia situazione non rende alcun elemento visibile o invisibile. –

+0

Ya right. Se questa risposta risolve il problema, contrassegnalo come accettato. – Manigandan

+0

In realtà non .. –

Problemi correlati