单击菜单链接时获取元素不是可单击的异常

Posted

技术标签:

【中文标题】单击菜单链接时获取元素不是可单击的异常【英文标题】:Getting Element is not clickable exception while click on a menu link 【发布时间】:2017-01-13 10:20:04 【问题描述】:

我正在尝试单击菜单链接,但没有任何运气。它总是显示异常 -

线程“主”org.openqa.selenium.WebDriverException 中的异常: 未知错误:元素在点 (64, 64) 处不可点击。其他 元素会收到点击:

我有关注htmlsn-p

<div id="RWR" class="clsDesktopHome" style="position: absolute; left: 0px; right: 0px; top: 0px; bottom: 0px; overflow: auto;">
    <div class="clsDesktop clsDesktopHomePage" style="width: 1553px; height: 430px; top: 0px; left: 15px;">
        <div id="foid:2" class="clsDesktopHeader clsTextOnDesktopColor">
            <div id="foid:1" class="clsDesktopTabs" style="margin-right: 230px; height: 28px; visibility: visible; width: auto;">
                <span class="clsDesktopTab clsDesktopTabActive clsDesktopTabTypeHome clsDesktopTabTypeHomeActive">
                    <span class="clsDesktopTabContent">
                        <span class="clsDesktopTabTypeIcon"></span>
                        <span class="clsDesktopTabMenuIcon"></span>
                        <span class="clsDesktopTabCollaborationIcon"></span>
                        <span class="clsDesktopTabCaption">Home</span>
                        <span class="clsDesktopTabCloseIcon"></span>
                    </span>
                </span>
                <span class="clsDesktopTab clsDesktopTabInactive clsDesktopTabCanClose clsDesktopTabTypeSheet">
                <span class="clsDesktopTab clsDesktopTabInactive clsDesktopTabCanClose clsDesktopTabTypeSheet">
                <span class="clsDesktopTab clsDesktopTabInactive clsDesktopTabCanClose clsDesktopTabTypeSheet">
                <span class="clsDesktopTab clsDesktopTabInactive clsDesktopTabCanClose clsDesktopTabTypeSheet">
                <span class="clsDesktopTab clsDesktopTabInactive clsDesktopTabCanClose clsDesktopTabTypeSheet">
                <span class="clsDesktopTab clsDesktopTabInactive clsDesktopTabCanClose clsDesktopTabTypeSheet">
                <span class="clsDesktopTab clsDesktopTabInactive clsDesktopTabCanClose clsDesktopTabTypeSheet">
                <span class="clsDesktopTab clsDesktopTabHidden clsDesktopTabNoCaption clsDesktopTabTypeTabsMenu">
                <span class="clsDesktopTab clsDesktopTabInactive clsAddNewContainer clsDesktopTabTypeAddNew">
            </div>
        <div class="clsDesktopBelowTabs" style="height: 325px; visibility: visible;">
        <div id="foid:2" class="clsDesktopFooter clsTextOnDesktopColor" style="height: 18px; line-height: 18px;">
    </div>
    <div class="clsModalNode" style="position: absolute; left: 0px; top: 0px; width: 0px; height: 0px; z-index: 10; background-color: rgb(0, 0, 0);"></div>
    <div style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; z-index: 30; background-color: rgb(221, 221, 221); opacity: 0.4; display: none;"></div>
</div>

这是快照的样子 -

我正在使用以下代码来完成相同的操作 -

    WebElement element = driver.findElement(By.xpath(".//*[@id='foid:1']/span[1]/span/span[4]"));
    WebDriverWait wait = new WebDriverWait(driver, 120);
    wait.until(ExpectedConditions.elementToBeClickable(element));

   //driver.findElement(By.xpath("//span[contains(text(), 'Home')]")).click();

    driver.findElement(By.xpath(".//*[@id='foid:1']/span[1]/span/span[4]")).click();

我确实检查了接受点击的 DOM 中的 &lt;div&gt; 标记。但我看到了这个

<div style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; z-index: 30; background-color: rgb(221, 221, 221); opacity: 0.4;"></div>

具有一个附加属性,即display:none;

使用以下配置:

    Selenium 3.0.1 驱动程序-ChromeDriver

我不知道如何处理这种情况。

【问题讨论】:

您使用的是哪个驱动程序? 我正在使用ChromeDriver 尝试使用 javascript 执行器来点击元素 你想点击Home按钮吗?? @Saurabh,是的,我想这样做 【参考方案1】:

尝试等待被点击的元素消失:

new WebDriverWait(driver, 10).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath('//div[@style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; z-index: 30; background-color: rgb(221, 221, 221); opacity: 0.4;"]')));

由于这个答案被否决,我添加了更多细节来解释为什么它可能是可接受的解决方案。

这是chromedriver 的一个已知问题(我个人遇到过几次):chromedriver 有时会忽略模式窗口,例如“正在加载页面”

并且“认为”目标元素(被模态窗口覆盖)实际上是可见和可点击的,并试图使模态窗口接收到点击。

所以等到模态窗口消失是有意义的。

【讨论】:

@Andersson,你是绝对正确的。这个解决方案对我有用。谢谢【参考方案2】:

我遇到了同样的问题并尝试了很多解决方案,但都没有成功。最后我看到了 selenium 文档并找到了stalenessof

new WebDriverWait(driver, 10).until(ExpectedConditions.stalenessOf(findElement(By.xpath("element_path"))));

它现在应该可以工作了。

【讨论】:

以上是关于单击菜单链接时获取元素不是可单击的异常的主要内容,如果未能解决你的问题,请参考以下文章

Katalon:无法单击对象:找不到ID的Web元素

CKEditor 5如何从任何小部件/模型/视图中获取单击,更新和删除的事件

我想获取不包含某些文本的元素并单击其最近的按钮

在循环中单击另一个元素时将事件侦听器添加到元素

材料组件:单击内部时保持菜单“打开”

单击父元素时获取子元素的ID