2016-11-14 93 views
0

我試圖自動化一個方案,其中的條件是我必須選擇所有的下拉選項,我必須逐個單擊該選項。我嘗試了代碼,但它只點擊第一個選項,並顯示錯誤爲陳舊元素不可點擊。 請幫忙。硒webdriver中的陳舊元素異常

+0

您應該確保頁面已加載並且所有請求都已完成,之後您可以搜索您的元素。 – lauda

+0

你使用POM嗎?如果是的話,我可以提出一些建議。 –

+0

是的,請告訴我 – Test

回答

0

StaleElementException發生如果我找到一個元素,DOM得到更新,然後我嘗試與元素進行交互。

那麼我該如何處理呢?使用下面的方法點擊試圖單擊元素多次:

public boolean retryingFindClick(By by) { 
     boolean result = false; 
     int attempts = 0; 
     while(attempts < 2) { 
      try { 
       driver.findElement(by).click(); 
       result = true; 
       break; 
      } catch(StaleElementException e) { 
      } 
      attempts++; 
     } 
     return result; 
} 

採取了這種外觀極好的解決方案,從here

0

當你從下拉菜單中選擇一個選項時,你的DOM也會得到更新。所以,你也需要更新你的對象。請參閱示例代碼片段:

Select select = new Select(driver.findElement(By.cssSelector("your dropdown's locator"))); // you may use any locator of your choice 
    List<WebElement> options = select.getOptions(); 

    for(WebElement option : options){ 
      select.selectByVisibleText(option.getText()); 

      //re-assign your select object since your page has been reloaded after selecting an option 
      select = new Select(driver.findElement(By.cssSelector("your dropdown's locator"))); 
    } 
+0

試過這一個,但顯示相同 – Test