2016-03-19 2 views
0

Ich versuche, ein Element in einer Listbox auszuwählen. Der folgende Code funktioniert, wenn Debuggen der Anwendung, aber nicht auf einem normalen Lauf (als JUnit-Test)Selenium Webdriver-Code funktioniert auf Debug aber nur auf einem normalen Lauf

wait.until(ExpectedConditions.elementToBeClickable(
    By.xpath("//div[@id='ContentArea']//tbody/tr[2]/td/div/span/span/span[2]/span") 
)); 
driver.findElement(
    By.xpath("//div[@id='ContentArea']//tbody/tr[2]/td/div/span/span/span[2]/span") 
).click(); 

wait.until(ExpectedConditions.elementToBeClickable(
    By.xpath("//ul[@id='symptomHeadGroupDropDown_listbox']/li[5]") 
)); 
driver.findElement(
    By.xpath("//ul[@id='symptomHeadGroupDropDown_listbox']/li[5]") 
).click(); 

Irgendwelche Ideen?

+0

Haben Sie versucht, die Warte Timeout-Wert zu erhöhen? Außerdem muss nach dem Aufruf von 'wait.until()' kein zusätzlicher 'findElement()' -Aufruf ausgegeben werden. 'wait.until()' würde in Ihrem Fall ein 'WebElement' zurückgeben. – alecxe

+0

Dann ist das wahrscheinlich ein Problem mit Ihren Wartezeiten. Versuchen Sie, einen Thread.sleep vor den Bruchpunkt zu setzen und ersetzen Sie ihn dann durch implizite/explizite Wartezeiten. – Prateek

+0

Während des Debuggens verlangsamen Sie die Testschritte. Wenn Sie normal arbeiten, gehen sie so schnell, dass Sie die richtigen erwarteten Bedingungen haben müssen. – djangofan

Antwort

0

diesen Code versuchen, es für jede Sekunde bis 60 seeconds warten Element zu finden und klicken Sie auf:

int flag=0,wait=0; 
while(flag==0 && wait<60){ 
    try{ 
     driver.findElement(By.xpath("//div[@id='ContentArea']/div/div/div[2]/div/table/tbody/tr[2]/td/div/span/span/span[2]/span")).click(); 
     flag=1; 
    } 
    catch(Exception){ 
     driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS); 
     wait++; 
    } 
} 

flag=0,wait=0; 

while(flag==0 && wait<60){ 
    try{ 
       driver.findElement(By.xpath("//ul[@id='symptomHeadGroupDropDown_listbox']/li[5]")).click(); 
     flag=1; 
    } 
    catch(Exception){ 
     driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS); 
     wait++; 
    } 
} 
0

würde meine Theorie, dass der Zustand des WebElement zwischen wait.until Anruf ändert und das zweite Mal, dass Sie es auflösen, um Klick aufzurufen.

Anstatt die Lösung der WebElement mehrfach, rufen click() auf dem WebElement Rückgabewert von Ihrem Anruf auf das WebDriverWait.

WebElement target1 = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='ContentArea']//tbody/tr[2]/td/div/span/span/span[2]/span"))); 
target1.click(); 

WebElement target2 =wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//ul[@id='symptomHeadGroupDropDown_listbox']/li[5]"))); 
target2.click(); 

Oder, wenn Sie es als Aushilfe var nicht speichern wollen ...

wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='ContentArea']//tbody/tr[2]/td/div/span/span/span[2]/span"))).click(); 
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//ul[@id='symptomHeadGroupDropDown_listbox']/li[5]"))).click(); 
Verwandte Themen