Selenium - 元素在点上不可点击

时间:2015-04-08 07:09:11

标签: javascript selenium selenium-chromedriver

我正在使用selenium作为测试脚本。我收到以下错误,随机发生此错误。当我跑10次时,我得到了大约两次。所以它不是真正可重复的。有谁知道为什么会这样?我试图点击的元素在浏览器中肯定是可见的,并且不会四处移动,因此无需调整大小或拖动元素。我正在使用chrome webdriver并且我阅读了其他故障排除策略(Debugging "Element is not clickable at point" error)并且它们似乎与我的问题无关。我也等了足够的时间。

UnknownError: unknown error: Element is not clickable at point (167, 403). Other element would receive the click: <div class="leftMasterBackground"></div>

8 个答案:

答案 0 :(得分: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(),其中包含所有这些稳定性步骤{ {1}}这是默认点击而没有任何变化。

答案 1 :(得分: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);

答案 2 :(得分:2)

我也遇到了与Chrome相同的问题。我已经解决了在点击元素之前放一行代码:

scrollToViewElement(driver,xpath);

答案 3 :(得分:1)

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

答案 4 :(得分: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();

答案 5 :(得分:0)

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

我给了xpath,它解决了这个问题。其他人建议1.滚动2.睡觉也适合他们。

答案 6 :(得分:0)

有时这会在我的Katalon Studio脚本中发生。我发现非常有效的方法是使用JavaScript单击这些元素:

@Keyword
def clickUsingJS(TestObject to, int timeout) {

    try {
        WebUI.click(to)
    }
    catch (Exception e) {
        WebDriver driver = DriverFactory.getWebDriver()
        WebElement element = WebUiCommonHelper.findWebElement(to, timeout)
        JavascriptExecutor executor = ((driver) as JavascriptExecutor)
        executor.executeScript('arguments[0].click()', element)
    }
    throw(e)
}

编辑: 参见also

答案 7 :(得分:0)

为获得最佳解决方案,请使用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);

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