我使用了显式等待,但我收到了警告:
org.openqa.selenium.WebDriverException:元素在点 (36, 72) 处不可点击。其他元素会收到点击:… 命令持续时间或超时:393 毫秒
如果我使用 Thread.sleep(2000)
我不会收到任何警告。
@Test(dataProvider = "menuData")
public void Main(String btnMenu, String TitleResultPage, String Text) throws InterruptedException {
WebDriverWait wait = new WebDriverWait(driver, 10);
driver.findElement(By.id("navigationPageButton")).click();
try {
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(btnMenu)));
} catch (Exception e) {
System.out.println("Oh");
}
driver.findElement(By.cssSelector(btnMenu)).click();
Assert.assertEquals(driver.findElement(By.cssSelector(TitleResultPage)).getText(), Text);
}
原文由 Maria 发布,翻译遵循 CC BY-SA 4.0 许可协议
WebDriverException: 元素在点 (x, y) 不可点击
这是一个典型的 org.openqa.selenium.WebDriverException ,它扩展了 java.lang.RuntimeException 。
此异常的字段是:
protected static final java.lang.String BASE_SUPPORT_URL
public static final java.lang.String DRIVER_INFO
public static final java.lang.String SESSION_ID
关于您的个人用例,错误说明了一切:
It is clear from your code block that you have defined the
wait
asWebDriverWait wait = new WebDriverWait(driver, 10);
but you are calling theclick()
method on the element before theExplicitWait
在until(ExpectedConditions.elementToBeClickable)
中发挥作用。解决方案
错误
Element is not clickable at point (x, y)
可能由不同的因素引起。您可以通过以下任一过程解决它们:1. 由于存在 JavaScript 或 AJAX 调用,元素未被点击
尝试使用
Actions
类:2. 元素未被点击,因为它不在 视口 内
尝试使用
JavascriptExecutor
将元素放入视口中:3. 页面在元素可点击之前刷新。
在这种情况下,如第 4 点所述,引入 ExplicitWait ,即 WebDriverWait 。
4. 元素存在于 DOM 中但不可点击。
在这种情况下,将 ---
ExpectedConditions
设置为elementToBeClickable
以使元素可点击:5. 元素存在但有临时覆盖。
在这种情况下,
ExplicitWait
与ExpectedConditions
设置为invisibilityOfElementLocated
以使覆盖层不可见。6. 元素存在但具有永久覆盖。
使用
JavascriptExecutor
直接在元素上发送点击。