如何在 Selenium WebDriver 中解決 ElementNotInteractableException?


如果元素在 DOM 中可用,但沒有處於可以互動的狀態,則會在 Selenium 中出現 ElementNotInteractableException。此異常的一些原因包括:

要與之互動的元素可能被另一個元素覆蓋。元素的這種重疊可能是臨時或永久的。要解決臨時重疊,我們可以等待元素的預期條件。

我們可以等待覆蓋元素的 elementToBeClickable 的預期條件不可見。或者,等待與我們想要互動的元素的 elementToBeClickable 的預期條件。

語法

WebDriverWait w= (new WebDriverWait(driver, 7));
w.until(ExpectedConditions
. elementToBeClickable (By.id("id of element")));
//alternate solution
w.until(ExpectedConditions
. invisibilityOfElementLocated(By.id("id of overlay element")));

要解決永久重疊,我們可以使用 JavaScript Executor 來執行單擊操作。Selenium 使用 executeScript 方法來執行 JavaScript 命令。

語法

WebElement l = driver.findElement(By.id("id of element"));
JavascriptExecutor j = (JavascriptExecutor) driver;
j.executeScript("arguments[0].click();", l);

示例

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.JavascriptExecutor;
public class InteractableExceptionFix{
   public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver",
         "C:\Users\ghs6kor\Desktop\Java\chromedriver.exe");
      WebDriver driver = new ChromeDriver();
      //launch URL
      driver.get("https://login.yahoo.com/");
      //identify element
      WebElement l = driver.findElement(By.xpath("//input[@id='persistent']"));
      //JavascriptExecutor to click element
      JavascriptExecutor j = (JavascriptExecutor) driver;
      j.executeScript("arguments[0].click();", l);
      boolean t = l.isSelected();
      if (t) {
         System.out.println("Checkbox is not checked");
      }else {
         System.out.println("Checkbox is checked");
      }
      driver.quit();
   }
}

輸出

更新於:07-Apr-2021

3K+ 瀏覽量

開啟你的 職業

透過完成課程獲得認證

立即開始
廣告
© . All rights reserved.