首頁 >Java >java教程 >為什麼 Selenium WebDriver 會拋出 ElementNotInteractableException,以及如何修復它?

為什麼 Selenium WebDriver 會拋出 ElementNotInteractableException,以及如何修復它?

Susan Sarandon
Susan Sarandon原創
2024-11-29 12:02:14844瀏覽

Why Does Selenium WebDriver Throw an ElementNotInteractableException, and How Can I Fix It?

Selenium WebDriver 拋出ElementNotInteractableException:故障排除和解決方案

簡介:

在Selenium WebDriver 中, ElementNotInteractableException是常見的情況當嘗試與不適合互動的狀態的元素進行互動時。發生此錯誤的原因有很多,包括:

ElementNotInteractableException 的原因:

  • 暫時疊加:其他元素可能會暫時出現阻止目標元素,使其無法存取
  • 永久疊加:永久元素可能會永久遮蔽目標元素,從而阻止點擊。

ElementNotInteractableException 的解決方案:

1。使用明確等待:

  • 使用 WebDriverWait 和 ExpectedConditions.elementToBeClickable 等待目標元素變為可點擊狀態,然後再與其互動。

2.處理永久疊加:

  • 將 WebDriver 實例投射到 JavascriptExecutor 並直接在目標元素上執行 JavaScript click() 方法。

特定問題在提供的程式碼中:

Gmail 登入遇到的給定程式碼嘗試輸入密碼時出現 ElementNotInteractableException。這可能是由於代碼嘗試發送密鑰時密碼字段未完全呈現。

針對所提供程式碼的解決方案:

實作明確等待在傳送金鑰之前,密碼欄位變成可點擊。以下是修正後的程式碼:

System.setProperty("webdriver.gecko.driver", "C:\Users\Ruchi\workspace2\SeleniumTest\jar\geckodriver-v0.17.0-win64\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
String url = "https://accounts.google.com/signin";
driver.get(url);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
WebElement email_phone = driver.findElement(By.xpath("//input[@id='identifierId']"));
email_phone.sendKeys("[email protected]");
driver.findElement(By.id("identifierNext")).click();
WebElement password = driver.findElement(By.xpath("//input[@name='password']"));
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(password)); // Explicit wait
password.sendKeys("test1");
driver.findElement(By.id("passwordNext")).click();

此程式碼引入了明確等待,允許密碼欄位在嘗試與其互動之前在 HTML DOM 中正確呈現,從而有效解決 ElementNotInteractableException 問題。

以上是為什麼 Selenium WebDriver 會拋出 ElementNotInteractableException,以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn