这是我启动HTMLUnit浏览器并获取标题的基本代码。在运行代码时,我得到的标题为null,后来它抛出以下执行:
使用过的瓶子:
代码试用:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class HtmlUnitDriverTest {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new HtmlUnitDriver();
Thread.sleep(5000);
driver.get("https://google.com");
System.out.println(driver.getTitle());
driver.findElement(By.name("q")).sendKeys("testing");
}
}
O / p:
线程“ main”中的异常java.lang.IllegalStateException:无法按名称找到com.gargoylesoftware.htmlunit.UnexpectedPage@2e32ccc5的元素
在org.openqa.selenium.htmlunit.HtmlUnitDriver.findElementByName(HtmlUnitDriver.java:1285)
答案 0 :(得分:1)
您需要考虑几个事实:
在调用Thread.sleep(5000);
之后立即引入HtmlUnitDriver()
实际上是没有意义的。您可以在调用Thread.sleep(5000);
之后使用driver.get()
。但是,根据最佳实践硬编码的Thread.sleep(n)
和隐式等待,应将其替换为 WebDriverWait 。
在这里您可以找到有关Replace implicit wait with explicit wait (selenium webdriver & java)
您会看到 title 为 null ,因为驱动程序甚至在之前尝试提取 Page Title 。页面标题在HTML DOM
作为使用 htmlunit-driver-2.33.0-jar-with-dependencies.jar 的解决方案,您需要为 Page引入 WebDriverWait 在提取之前标题 <包含字符序列,您可以使用以下解决方案:
代码块:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class A_HtmlunitDriver_2_33_0 {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new HtmlUnitDriver();
driver.get("https://google.com");
new WebDriverWait(driver, 20).until(ExpectedConditions.titleContains("Go"));
System.out.println(driver.getTitle());
}
}
控制台输出:
Google