錯誤處理:修復動態連結的「陳舊元素引用」
在動態Web 期間,Web 元素可能會變得陳舊並與頁面文檔分離頁面變更。當嘗試與這些元素互動時,這可能會導致“過時元素引用”錯誤。當瀏覽載入新內容的選單或標籤時,會出現一種特殊情況。
在提供的範例中,Selenium 嘗試點擊多個相同連結清單中的連結。出現錯誤「過時的元素引用:元素未附加到頁面文件」是因為底層頁面結構更改後元素引用變得過時。
要解決此問題,我們可以利用異常處理並重新初始化頁面內容重新載入後的元素參考。以下修改後的程式碼片段示範了這種方法:
<code class="java">public static void main(String[] args) throws InterruptedException { WebDriver driver = new ChromeDriver(); driver.navigate().to("url......"); driver.findElement(By.id("Login1_txtEmailID")).sendKeys("[email protected]"); driver.findElement(By.id("Login1_txtPassword")).sendKeys("Testing1*"); driver.findElement(By.id("Login1_btnLogin")).click(); List<WebElement> LeftNavLinks = driver.findElements(By.xpath("//*[@id='sliding-navigation']//a")); Thread.sleep(1000); String ben = "Benefit Status"; for (WebElement e : LeftNavLinks) { String linkText = e.getText(); System.out.print(i + " " + linkText + "\n"); if (linkText.equals(ben)) { String BenefitStatLi = "//*[@id='sliding-navigation']/li[%s]/a"; System.out.print(i + " " + linkText + "\n"); try { driver.findElement(By.xpath(String.format(BenefitStatLi, i))).click(); driver.findElement(By.xpath("//* [@id='divContentHolder']/div[1]/a[1]")).click(); } catch (org.openqa.selenium.StaleElementReferenceException ex) { driver.findElement(By.xpath(String.format(BenefitStatLi, i))).click(); driver.findElement(By.xpath("//* [@id='divContentHolder']/div[1]/a[1]")).click(); } } i++; } }</code>
透過合併異常處理,我們重新初始化 try-catch 區塊中的元素引用,確保使用最新的引用互動。這有效地緩解了「過時元素引用」錯誤,並能夠在動態網頁中成功導航。
以上是如何處理動態網頁 Selenium 中的「過時元素參考」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!