单击菜单链接时获取元素不是可单击的异常
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) 处不可点击。其他 元素会收到点击:
我有关注html
sn-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 中的 <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;"></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"))));
它现在应该可以工作了。
【讨论】:
以上是关于单击菜单链接时获取元素不是可单击的异常的主要内容,如果未能解决你的问题,请参考以下文章