Selenium - 元素在点处不可点击

问题描述 投票:0回答:7

我使用 selenium 作为测试脚本。我收到以下错误,并且此错误是随机发生的。当我跑 10 次时,我会得到大约两次这样的信息。所以它并不是真正可复制的。有谁知道为什么会发生这种情况?我尝试单击的元素在浏览器中绝对可见并且不会移动,因此无需调整大小或拖动元素。我正在使用 chrome webdriver,并且阅读了其他故障排除策略(调试“元素在点上不可点击”错误),它们似乎与我的问题无关。我也等够了。

UnknownError: unknown error: Element is not clickable at point (167, 403). Other element would receive the click: <div class="leftMasterBackground"></div>
javascript selenium selenium-chromedriver
7个回答
7
投票

您可以执行许多步骤来提高单击不同 UI 元素时的稳定性:

  • 显式地等待它存在在DOM中
  • 滚动进入元素视图
  • 检查是否可点击

对稳定有帮助吗?

WebDriverWait wait = new WebDriverWait(driver, 3)
JavascriptExecutor js = ((JavascriptExecutor) driver)

//presence in DOM
wait.until(ExpectedConditions.presenceOfElement(By.id("ID")));

//scrolling
WebElement element = driver.findElement(By.id("ID")));  
js.executeScript("arguments[0].scrollIntoView(true);", element);

//clickable
wait.until(ExpectedConditions.elementToBeClickable(By.id("ID")));

此外,如果您决定使用更自定义的界面覆盖默认的 Actions 界面,您可以使用两种类型的点击(例如):

click()
它将具有所有这些稳定性步骤,
fastClick()
它将是默认点击,不做任何修改。


2
投票

我在 Chrome 上也遇到了同样的问题。我已经解决了在单击元素之前放置一行代码的问题:

scrollToViewElement(driver,xpath);

2
投票

为了获得最佳解决方案,请使用java脚本来聚焦元素 使用 ----> JavascriptExecutor jsnew=(JavascriptExecutor) 驱动程序; WebElement element=driver.findElement(By.xpath("")); jsnew.executeScript("arguments[0].scrollIntoView({block:\"center\"});", element);

您可以使用 id 、 css 选择器代替 xpath : 这个scrollIntoView会将这个特定元素带到页面中间,他们的驱动程序将能够点击元素。

如果是普通按钮或链接, 使用 jsnew.executeScript("arguments[0].click();",element);

这是点击的一致解决方案。


2
投票

我已经通过捕获异常并像这样管理它来解决:

WebDriver driver = new ChromeDriver();
WebElement element = driver.findElement(By.id("ID"));
boolean clicked = false;
do{
    try {
        element.click();
    } catch (WebDriverException e) {
        continue;
    } finally {
        clicked = true;
    }
} while (!clicked);

1
投票

单击要单击的元素的父元素。这只能是解决方法。


0
投票

由于其中一个微调器隐藏了该元素,我遇到了同样的问题。

我给了xpath,它解决了问题。其他人建议 1.滚动 2.睡眠对他们也有效。


0
投票
  • 这只发生在 chrome 上,因此它适用于 ie 和 firefox
  • ChromeDriver 始终单击元素的中间
  • Chrome 驱动程序无法计算链接正确的屏幕位置的原因。

解决方案:

// Find an element and define it

WebElement elementToClick = driver.findElement(By.xpath("some xpath"));
// Scroll the browser to the element's Y position
((JavascriptExecutor) driver).executeScript("window.scrollTo(0,"+elementToClick.getLocation().y+")");
// Click the element
elementToClick.click();
© www.soinside.com 2019 - 2024. All rights reserved.