2016-03-19 16 views
0

リストボックスの項目を選択しようとしています。次のコードは、Selenium Webdriverコードはデバッグ時に正常に動作しますが、正常に実行されません。

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(); 

(JUnitテストなど)、通常の実行時に任意のアイデアをアプリケーションをデバッグするときに動作しますが、ありませんか?

+0

あなたが待機タイムアウト値を大きくしようとしたことがありますか?また、 'wait.until()'呼び出しの後に追加の 'findElement()'呼び出しを発行する必要はありません。あなたの場合の 'wait.until()'は 'WebElement'を返します。 – alecxe

+0

それはおそらくあなたの待ち時間の問題です。暗黙的な/明示的な待機で置き換える前に、Thread.sleepを配置してください。 – Prateek

+0

デバッグ中にテストステップが遅くなっています。あなたが正常に実行すると、彼らは非常に速く進んでいるため、適切な期待条件を定める必要があります。 – djangofan

答えて

0

それが要素を見つけてクリックして60 seecondsまでの各秒を待ちます、このコードを試してみてください。

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

私の理論はWebElementの状態があなたの wait.until呼び出しの間で変化していることだろうもう一度クリックして呼び出すように解決します。 をWebDriverWaitに

むしろWebElement複数回を解決するよりも、あなたの呼び出しからWebElement戻り値のクリック()を呼び出します。

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(); 

それとも、あなたは一時VARとしてそれを保存したくない場合は...

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(); 
関連する問題