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点所述,引发ExplicitWait
即WebDriverWait
。
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();