昨天我问问题如何处理:"元素在点上不可点击 - 其他元素会收到点击" Selenium WebDriver中的例外。
我通过这个解决方案得到了几个答案:
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id(...));
是的,它有道理,但在实践中它并不起作用。 下面是我的代码:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView();", categoryItem);
Thread.sleep(1000);
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(categoryItem));
categoryItem.click();
List<WebElement> selects = driver.findElements(By.tagName("select"));
Select ticketsSelect = new Select(selects.get(3));
ticketsSelect.selectByValue("2");
By addToBasket = By.xpath("//div[contains(text(),'Add to Basket')]");
Thread.sleep(1000);
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(addToBasket));
driver.findElement(addToBasket).click();
我必须在每次等待之前放置1秒睡眠,直到元素可点击,因为没有它,它仍会抛出异常,其他元素将接收到点击。 我的问题是,如果元素不可点击,WebDriver会点击此元素吗?
答案 0 :(得分:2)
ElementToBeClickable
- 可以看到并启用检查元素的期望,以便您可以单击它。
但它似乎并不意味着这个元素不会被隐藏&#34;在其他一些元素下,即使它是另一个标签的透明部分。根据我的经验,这种异常主要发生在您尝试与当前加载的页面进行交互时,并且您有典型的加载div与整个页面重叠加载图标,或者在其他情况下,当您有一个开放模式时,通常用覆盖透明覆盖覆盖页面,以防止用户与页面交互。
在这个answer中你可以看到你基本上有两个选择: