2013-07-06 3 views
8

Ok, also habe ich zwei Dropdown-Listen. Liste B füllt basierend auf der Auswahl Liste A mit der Ajax-Technologie.Wie Sie auf einen Ajax-Anruf warten, der beim Auffüllen einer Dropdown-Liste in Selenium arbeitet

Das Problem ist jetzt, dass ich einmal eine Option Form Liste A wählen, ich bin der Liste B bevölkert zu sehen, nicht in der Lage, wie Ajax viel Zeit nimmt zu laden. Ich möchte wissen, wie man die Wait-Bedingung in diesem Szenario verwendet, um Ajax genügend Zeit zum Laden zu geben. Ich bin ein Anfänger, also tut es mir leid, wenn meine Frage dumm klingt. Aber ich bin wirklich lange dabei.

Ich kann nicht verwenden:

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

weil die ID, xpath etc gleich bleibt immer, auch wenn die Liste nicht aufgefüllt wird.

+0

mohit

Antwort

8

Ich würde zwei Ansätze vorschlagen, wartet auf Option Item x, der andere Weg wartet auf Optionen zählen größer als sein ein.

So versuchen, die folgenden (nicht getestete Java-Code, so dass Sie vielleicht ein wenig debuggen müssen):

Warten Sie eine Option (entweder von ihrem Wert oder Text) wollen:

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 zählen größer als ein

für Optionen warten
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 ("// wähle [@ id = 'alertSubCatSelectBox']/option [text() = 'Element x']"); hat perfekt funktioniert. Danke vielmals. :) – mohit

1

Es gibt einen Onchange-Ereignisaufruf an populesubcategory fn. Dieses fn shud macht das Laden der zweiten Liste. Können Sie den Code für diese Funktion veröffentlichen, wenn verfügbar .. Eine Wartezeit kann basierend darauf durchgeführt werden

+0

Ich kann Ich finde den Code für diese Funktion. Aber ich habe verstanden, was Sie gesagt haben. Es gibt auch eine Onchange-Funktion für Liste B, um den Wert zu erfassen, ich werde einfach auch den Code dafür posten. Ich denke, dass es eine Hilfe sein kann . – mohit

+0