HtmlUnitDriver似乎没有加载页面

我正在尝试让HtmlUnitDriver在我的开发环境中工作。 作为初学者,我尝试使用最新的selenium服务器jar实现以下页面中的示例: http : //code.google.com/p/selenium/wiki/GettingStarted

不幸的是,每当我尝试运行此程序时,我都会遇到以下exception:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element with name: q For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html Build info: version: '2.35.0', revision: 'c916b9d', time: '2013-08-12 15:42:01' System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_16' Driver info: driver.version: HtmlUnitDriver at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElementByName(HtmlUnitDriver.java:853) at org.openqa.selenium.By$ByName.findElement(By.java:292) at org.openqa.selenium.htmlunit.HtmlUnitDriver$5.call(HtmlUnitDriver.java:1404) at org.openqa.selenium.htmlunit.HtmlUnitDriver$5.call(HtmlUnitDriver.java:1) at org.openqa.selenium.htmlunit.HtmlUnitDriver.implicitlyWaitFor(HtmlUnitDriver.java:1094) at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElement(HtmlUnitDriver.java:1401) at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElement(HtmlUnitDriver.java:419) at Justin.Main.main(Main.java:30) 

我已经尝试修改我的代码以包含此处实现的修复:

获取url时,HtmlUnitDriver会导致问题

我在调用driver.get("http://www.google.com")之后尝试使用driver.getCurrentUrl()获取页面的URL,但返回的字符串是about:blank

如果我使用FirefoxDriver运行它,这个例子中的类似代码肯定会起作用,但是为了满足要求,我需要我的脚本用selenium运行无头(如果它运行时使用特定的BrowserVersion就可以了,只要它是无头的) 。

任何帮助将不胜感激。

更新:

这是我正在尝试运行的代码。 我只想看到我可以让HtmlUnitDriver使用像在Google中输入搜索查询一样简单的工作。

 package Justin; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.htmlunit.HtmlUnitDriver; public class Main { public static void main(final String[] args) { // Create a new instance of the html unit driver // Notice that the remainder of the code relies on the interface, // not the implementation. final WebDriver driver = new HtmlUnitDriver(); ((HtmlUnitDriver)driver).setJavascriptEnabled(true); // And now use this to visit Google driver.get("http://www.google.com"); try { Thread.sleep(30000); } catch (final InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // Find the text input element by its name final WebElement element = driver.findElement(By.name("q")); // Enter something to search for element.sendKeys("Cheese!"); // Now submit the form. WebDriver will find the form for us from the element element.submit(); // Check the title of the page System.out.println("Page title is: " + driver.getTitle()); } } 

更新2:

这个问题非常奇怪。 我在家里的计算机上尝试了相同的代码,并且将BrowserVersion设置为Firefox或Internet Explorer时效果非常好。 这个问题肯定是由我工作场所的计算机配置造成的,虽然我仍然不知道为什么会这样。

在给出的示例代码中,它假设存在较旧的Google页面,其中搜索字段的名称为q。

页面不再标记为这种方式 – 尝试将driver.findElement(By.name("q"))更改为driver.findElement(By.cssSelector("input[id=gbqfq]")并查看是否可以解决您的问题 -一旦你加载了页面,它至少应该能够输入到搜索栏。

如果您在尝试获取页面后立即调用了driver.getCurrentUrl() ,则可能没有完全加载,而是返回about:blank。

如果这不起作用,我们可以继续进行故障排除 – 很难看到无头浏览器实际发生了什么,因此您可能需要暂时切换到FirefoxDriver以准确显示正在发生的事情。

我试着试一试:

如果是网络问题,请下载此工具以检查您所连接的端口是否正在使用中: http : //technet.microsoft.com/en-us/sysinternals/bb897437.aspx

这种情况非常方便。

要进一步调试,请尝试读取源代码。 将此行放在第一个元素选择器之前和页面加载之后:

 System.out.println(driver.getPageSource()); 

我想知道元素是否存在..

尝试在Firefox中使用Selenium IDE插件,看看它在执行操作时会刮擦什么。 您可以将代码导出到java中,然后尝试运行它。 我还会逐步完成家庭和工作计算机上的代码,看看是否存在任何差异。 由于DOM有时间完全加载,我看到代码工作(当发现该元素未发现错误时)。 此外,尝试实例化和实际的浏览器,以便您可以清楚地看到发生了什么。

此外,validation您在家庭和工作站之间使用的所有软件的版本。

1)尝试添加

 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

之前

 final WebElement element = driver.findElement(By.name("q")); 

2)或尝试

  try { WebElement element = driver.findElement(By.name("q")); } catch (Exception e) { Thread.sleep(1000); } 

如果您需要无头selenium,并且firefox适用于您的测试,请尝试使用phantomjs webdriver。

尝试使用

 HtmlUnitDriver driver = new HtmlUnitDriver(); 

您可以通过检查来检查页面是否已加载

 String pageTitle = driver.getTitle();