【问题标题】:Wait until elementToBeClickable is not the solution for other element would receive the click exception等到 elementToBeClickable 不是解决方案,其他元素会收到点击异常
【发布时间】:2018-10-27 13:05:49
【问题描述】:

昨天我问了如何处理:Selenium WebDriver 中的“元素不可点击 - 其他元素会收到点击”异常。

我收到了几个关于这个解决方案的答案:

WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id(...));

是的,它有道理,但实际上它不起作用。 以下是我的一段代码:

                JavascriptExecutor js = (JavascriptExecutor) driver;
            js.executeScript("arguments[0].scrollIntoView();", categoryItem);
            Thread.sleep(1000);
            new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(categoryItem));
            categoryItem.click();
            List<WebElement> selects = driver.findElements(By.tagName("select"));
            Select ticketsSelect = new Select(selects.get(3));
            ticketsSelect.selectByValue("2");

            By addToBasket = By.xpath("//div[contains(text(),'Add to Basket')]");
            Thread.sleep(1000);
            new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(addToBasket));
            driver.findElement(addToBasket).click();

我必须在每个等待元素可点击之前放置 1 秒睡眠,因为如果没有这个,它仍然会引发其他元素会收到点击的异常。 我的问题是,如果元素不可点击,为什么 WebDriver 会点击这个元素?

【问题讨论】:

  • 这个异常通常告诉你哪个元素会收到点击,那个元素是什么?是隐藏元素的导航栏吗?或者它是一个没有完全消失的模态等等?根据对此的答案,我有一个解决方案。

标签: java selenium-webdriver


【解决方案1】:

ElementToBeClickable – 检查元素的期望是可见的并且已启用,以便您可以单击它。

但这似乎并不意味着这个元素没有“隐藏”在其他元素下,即使它是另一个标签的透明部分。根据我的经验,当您尝试与当前加载的页面进行交互时,通常会发生此异常,并且典型的加载 div 与加载图标重叠整个页面,或者在其他情况下,当您有一个打开的模式时,这也通常使用覆盖透明覆盖覆盖页面,以防止用户与页面交互。

在这个answer你可以看到你基本上有两种选择:

  1. 您可以通过 JavaScript 调用发送点击事件。它总是有效的,但这不是你想做的事情。如果你想测试你的页面,你应该总是触发真正的点击事件。
  2. 等等。你无能为力。您只需要等到页面完全加载即可。在某种程度上,这可能会向您展示您的应用程序的缓慢部分,您可以在未来进行改进

【讨论】:

    猜你喜欢
    • 2016-06-08
    • 2016-12-19
    • 2018-03-16
    • 2017-04-16
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2018-10-26
    相关资源
    最近更新 更多