2013-07-06 6 views
8

Ok, quindi ho due menu a tendina chiamata Ajax. Lista B popola basa sulla selezione fatta su Lista A utilizzando la tecnologia Ajax.Come aspettare un funzionario che lavora su compilazione di un elenco a discesa in selenio

Ora il problema è che una volta che si seleziona una forma un'opzione elenco A, io non sono in grado di vedere la Lista B popolata come Ajax sta prendendo un sacco di tempo per caricare. Voglio sapere come usare la condizione Wait in questo scenario per dare a Ajax un tempo sufficiente per il caricamento. Sono un principiante quindi mi dispiace se la mia domanda sembra stupida. Ma sono davvero bloccato su questo a lungo.

non posso usare:

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

perché l'id, xpath ecc rimane la stessa da sempre, anche quando la lista non viene popolata.

+0

mohit

risposta

8

io suggerirei due approcci, uno è in attesa per l'opzione Item x, l'altro modo è in attesa di opzioni contano essere superiore a uno.

in modo da provare le seguenti (codice Java non testato, quindi potrebbe essere necessario eseguire il debug di un po '):

Attendere un opzione che si desidera (o dal suo valore o testo):

By byValue = By.cssSelector("#alertSubCatSelectBox > option[value='18222216517']"); 
//By byText = By.xpath("//select[@id='alertSubCatSelectBox']/option[text()='Item x']"); 
new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(byValue)); 

Or attendere opzioni contare più grande di un

WebDriverWait wait = new WebDriverWait(driver, 10); 
wait.until(new ExpectedCondition<Boolean>() { 
    public Boolean hasMoreThanOneOptions(WebDriver driver) { 
     return driver.findElements(By.cssSelector("#alertSubCatSelectBox option")).size() > 1; 
    } 
}); 
+0

By.xpath ("// seleziona [@ id = 'alertSubCatSelectBox']/option [text() = 'Item x']"); ha funzionato perfettamente Grazie mille. :) – mohit

1

c'è una chiamata evento onchange per populatesubcategory fn. Questo sta facendo il secondo caricamento della lista. Puoi pubblicare il codice per quella funzione, se available..A attesa può essere fatto sulla base di esso

+0

posso trovo il codice per quella funzione, ma ho capito quello che hai detto, c'è anche una funzione di scambio per l'elenco B per catturare il valore, inserirò il codice anche per quello. Penso che possa essere di qualche aiuto . – mohit

+0