我尝试与selenium webdriver同步,而且某些内容无法使用implicitlyWait()。
我理解隐含的方式(...)是代码等待,直到该元素可用于最大时间。
以下代码因错误而崩溃:
org.openqa.selenium.InvalidElementStateException: invalid element state: Element is not currently interactable and may not be manipulated
System.out正在打印: - >> false true false(isDiplayed(),isEnabled(),是Selected())
private static WebDriver driver;
public static void main(String[] args) throws InterruptedException {
setupWebDriverChrome();
//Thread.sleep(1000);
final String cssSelectorFromAirport = "div.od-airportselector.airportselector_root input[tabindex='11']";
final By cssSelector = By.cssSelector(cssSelectorFromAirport);
WebElement fromAirportElement = driver.findElement(cssSelector);
System.out.println("-->> " + fromAirportElement.isDisplayed() + " " + fromAirportElement.isEnabled() + " " + fromAirportElement.isSelected());
fromAirportElement.clear();
fromAirportElement.sendKeys("MUC");
}
private static void setupWebDriverChrome() {
System.setProperty("webdriver.chrome.driver", "C:\\...\\chromedriver.exe");
setupLocation();
}
private static void setupLocation() {
driver.manage().timeouts().implicitlyWait(1000, TimeUnit.MILLISECONDS);
driver.get("https://www.opodo.de/");
}
我也尝试了与Geckodriver相同的结果。
我也增加了等待时间但结果相同。
使其工作的唯一方法是使用Thread.sleep()(上面评论)
修改 PLS。请注意,我发现Selenium implicitwait not working没有重复。
答案 0 :(得分:2)
您必须等待您的元素可点击。尝试添加:
WebElement element = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.elementToBeClickable(By.cssSelector(cssSelectorFromAirport)));
所以:
setupWebDriverChrome();
//Thread.sleep(1000);
final String cssSelectorFromAirport = "div.od-airportselector.airportselector_root input[tabindex='11']";
WebElement element = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.elementToBeClickable(By.cssSelector(cssSelectorFromAirport)));
/*final By cssSelector = By.cssSelector(cssSelectorFromAirport);
WebElement fromAirportElement = driver.findElement(cssSelector);
System.out.println("-->> " + fromAirportElement.isDisplayed() + " " + fromAirportElement.isEnabled() + " " + fromAirportElement.isSelected());*/
element.clear();
element.sendKeys("MUC");
修改强>
隐式等待是告诉WebDriver对DOM进行轮询 尝试查找一个或多个元素的时间量 没有立即可用。默认设置为0.一旦设置, 隐式等待是为WebDriver对象实例的生命周期设置的。
这意味着,在您的示例中,selenium找到了元素,但它还没有"可点击"。
您也可以在测试中看到这一点。如果你看一下:
System.out.println("-->> " + fromAirportElement.isDisplayed() + " " + fromAirportElement.isEnabled() + " " + fromAirportElement.isSelected() );
失败时,输出为:
-->> false true false
当它工作时:
-->> true true false