我编写了自动化脚本来测试 AJAX 上非常繁重的Web应用程序,例如,保存设置时显示的模式对话框带有文本“Saving...
“,而lightbox使页面的其余部分变灰。
我的测试脚本试图在消息消失之前点击测试中的下一个链接。在驱动Firefox时几乎总是有效,但在驱动Chrome时显示以下错误:
Exception in thread "main" org.openqa.selenium.WebDriverException: Element is not clickable at point (99.5, 118.5). Other element would receive the click: <div class="dijitDialogUnderlay _underlay" dojoattachpoint="node" id="lfn10Dijit_freedom_widget_common_environment_Dialog_8_underlay" style="width: 1034px; height: 1025px; "></div> (WARNING: The server did not provide any stacktrace information)
这是因为lightbox挡住了我想要点击的元素。我想等lightbox消失后再点击链接。
检查lightbox是否不再存在并不是一个有效的解决方法,因为有时存在多个级别的模式对话框和lightbox,并且没有简单的方法来区分它们。
在Selenium中是否有一种方法来检测元素是否是可点击的(没有其他元素遮挡它)?try/catch是一种解决方法,但如果可能的话,我更愿意做一个适当的检查。
5条答案
按热度按时间zfciruhq1#
使用WebDriverWait条件。
Webdriver将等待5秒钟,以便单击您的元素。
zzwlnbp82#
您可以使用
ExpectedConditions.invisibilityOfElementLocated(By by)
方法,该方法会一直等到元素不可见或不存在于DOM上。所以,根据你的模式对话框消失或离开DOM所需的时间,webdriver会等待,最多等待10秒。
n8ghc7c13#
您可以创建一个
clickUntil
函数/方法,让WebDriver等待直到元素可单击并超时。它会尝试单击元素,并丢弃“Element is not clickable”错误消息,直到每次都被单击或超时。不知道如何在dojo中写,但这是一个想法。
sg24os4d4#
我也有同样的问题,但我测试了许多输入在网站上。一个是可点击的,我测试和其他-不是可点击的一个刚刚跳过。我做了它的try()catch()简单的代码:
而且更加优雅:
1sbrub3j5#
在Scala中:
1.等待标准代码(可见/不可见)
1.日志中的更多可见性:
1.如果有异步JavaScript进程,请使用带时间戳的Web元素: