目的:使用无头选项对登录页面进行硒测试。HTMLUnitDriver 最好)
我正在尝试使用HTMLUnitDriver自动登录到站点。
当我将密钥发送到元素时,它会抛出错误。
HtmlUnitDriver driver = new HtmlUnitDriver();
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.get("https://bigData/login.jsp");
WebDriverWait usernameWait = new WebDriverWait(driver, 3);
usernameWait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@id="username"]")));
driver.findElement(By.xpath("//input[@id="username"]")).sendKeys("admin");
错误:
线程"main"中的异常 org.openqa.selenium.ElementNotInteractableException: You 只能 与可见元素交互
我用ChromeDriver尝试了同样的方法。它工作正常!它没有引发此异常。但是我无法使用其中的无头选项。
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
WebDriver driver = new ChromeDriver(chromeOptions);
返回
线程"main"org.openqa.selenium.TimeoutException中的异常: 预期条件失败:等待元素的存在,位于: By.xpath://input[@id="用户名"] (用 500 尝试 3 秒 毫秒间隔)
工作正常,仅当初始化chromeDriver时未定义chromeOptions时。
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
WebDriver driver = new ChromeDriver();
请指导我这些情况可能是什么/建议替代方案?
根据文档,ElementNotInteractableException是W3C异常,它被抛出以指示尽管DOM树上存在元素,但它不处于可以与之交互的状态。
您可以尝试的代码是:
HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME ,true);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("https://bigData/login.jsp");
WebDriverWait usernameWait = new WebDriverWait(driver, 30);
usernameWait.until(ExpectedConditions.visibiltyOfElementLocated(By.xpath("//input[@id="username"]")));
usernameWait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id="username"]")));
driver.findElement(By.xpath("//input[@id="username"]")).sendKeys("admin");
尝试此代码并让我知道状态。