Selenium - 元素无法点击

我们可能会收到错误 - 元素在尝试单击 Selenium webdriver 中的链接时无法单击。这在 chromedriver 中很常见,因为 Chrome 浏览器通过点位置确定元素。

当一个元素的位置发生变化并且我们试图点击它时,就会遇到这个错误。这是因为元素存在于 DOM 中,但它的位置在页面上并不固定。

有一些解决方法可以修复此错误,如下所示 -

  • 添加显式等待。webdriver 可以等到预期的条件 - visibilityOf(webdriver shall wait for an element in DOM to be visible)。

  • 添加显式等待。webdriver 可以等到预期的条件 -visibilityOfElementLocated。webdriver 应等待元素出现在 DOM 中并显示在页面上。

  • 最大化浏览器的大小。

语法

driver.manage().window().maximize()

  • 添加 Actions 类的方法。

语法

WebElement l = driver.findElement(By.name("field-name"));

Actions at = new Actions(driver);
at.moveToElement(l).click().perform();

  • JavaScript 执行器。

沿 x 轴获取位置的语法 -

WebElement l = driver.findElement(By.name("field-name"));
JavascriptExecutor je =(JavascriptExecutor)driver;
je.executeScript("window.scrollTo(0,"l.getLocation().x+")");
l.click();

沿 y 轴获取位置的语法 -

WebElement l = driver.findElement(By.name("field-name"));
JavascriptExecutor je =(JavascriptExecutor)driver;
je.executeScript("window.scrollTo(0,"l.getLocation().y+")");
l.click();