我有个问题。
是什么让FirefoxDriver能够在java代码中找到WebElement并点击它们,但当使用HtmlUnitDriver运行相同的代码时,却找不到相同的WebElement。此外,当在HtmlUnit上运行相同的代码(应用HtmlUnit原则(时,找不到WebElement,事实上,代码返回NullPointerException。有什么特别的原因吗?
如果没有看到您的代码,我可能会猜测这可能是因为您需要启用javascript。
默认情况下,在HtmlUnitDriver中禁用JavaScript。
如果您在(LICENSE Apache 2.0(上查看源构造函数
https://github.com/SeleniumHQ/htmlunit-driver/blob/master/src/main/java/org/openqa/selenium/htmlunit/HtmlUnitDriver.java#L166
/**
* Constructs a new instance, specify JavaScript support
* and using the {@link BrowserVersion#getDefault() default} BrowserVersion.
*
* @param enableJavascript whether to enable JavaScript support or not
*/
public HtmlUnitDriver(boolean enableJavascript) {
this(BrowserVersion.getDefault(), enableJavascript);
}
和其他构造函数https://github.com/SeleniumHQ/htmlunit-driver/blob/master/src/main/java/org/openqa/selenium/htmlunit/HtmlUnitDriver.java#L143-L158
/**
* Constructs a new instance with JavaScript disabled,
* and the {@link BrowserVersion#getDefault() default} BrowserVersion.
*/
public HtmlUnitDriver() {
this(BrowserVersion.getDefault(), false);
}
/**
* Constructs a new instance with the specified {@link BrowserVersion}.
*
* @param version the browser version to use
*/
public HtmlUnitDriver(BrowserVersion version) {
this(version, false);
}
您可以看到,如果没有提供变量,它们会提供默认的false。
因此,要在HtmlUnitDriver中启用javascript,您需要在初始化它时提供true,即您希望javascript组件在其中处于活动状态。
WebDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_38, true);