Selenium Web驱动程序和Java。 元素在点(36,72)不可点击。 其他元素将收到点击:

我用明确的等待,我有警告:

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); } 

这是你的问题的答案:

错误告诉它所有的WebDriverException: Element is not clickable at point (36, 72). Other element would receive the click WebDriverException: Element is not clickable at point (36, 72). Other element would receive the click 。 从你的代码块清楚你已经定义了wait WebDriverWait wait = new WebDriverWait(driver, 10); 但是在ExplicitWait进入游戏之前调用了元素上的click()方法, until(ExpectedConditions.elementToBeClickable)

Element is not clickable的错误可能来自不同的因素。 您可以通过以下任一步骤来解决这些问题:

1.由于存在JavaScript或AJAX调用,元素不会被点击

尝试使用Actions类:

 WebElement element = driver.findElement(By.id("navigationPageButton")); Actions actions = new Actions(driver); actions.moveToElement(element).click().build().perform(); 

2.元素没有被点击,因为它不在视口内

尝试使用JavascriptExecutor将视图中的元素:

 WebElement myelement = driver.findElement(By.id("navigationPageButton")); JavascriptExecutor jse2 = (JavascriptExecutor)driver; jse2.executeScript("arguments[0].scrollIntoView()", myelement); 

3.页面在元素可点击之前被刷新。

在这种情况下,如第4点所述,引发ExplicitWaitWebDriverWait

4.元素存在于DOM中,但不可点击。

在这种情况下,将ExpectedConditions ExplicitWait设置为elementToBeClickable以使元素可点击:

 WebDriverWait wait2 = new WebDriverWait(driver, 10); wait2.until(ExpectedConditions.elementToBeClickable(By.id("navigationPageButton"))); 

元素存在,但有临时覆盖。

在这种情况下,将ExpectedConditions设置为invisibilityOfElementLocated ExplicitWait会导致Overlay不可见。

 WebDriverWait wait3 = new WebDriverWait(driver, 10); wait3.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("ele_to_inv"))); 

6.元素存在,但具有永久覆盖。

使用JavascriptExecutor直接在元素上发送点击。

 WebElement ele = driver.findElement(By.xpath("element_xpath")); JavascriptExecutor executor = (JavascriptExecutor)driver; executor.executeScript("arguments[0].click();", ele); 

让我知道如果这个答案你的问题。

你可以试试

 WebElement navigationPageButton = (new WebDriverWait(driver, 10)) .until(ExpectedConditions.presenceOfElementLocated(By.id("navigationPageButton"))); navigationPageButton.click();