java HtmlUnitDriver似乎未加载页面
我试图让HtmlUnitDriver在我的开发环境中工作。作为初学者,我尝试使用最新的selenium server jar实现以下页面中的示例: http://code.google.com/p/selenium/wiki/GettingStarted
不幸的是,每当我尝试运行此程序时,都会出现以下异常:
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)
我已尝试修改代码以合并此处实现的修复:
HtmlUnitDriver causes problems while getting an url
我尝试在调用driver.get("http://www.google.com")
之后使用driver.getCurrentUrl()
获取页面的URL,但返回的字符串是about:blank
如果我使用FirefoxDriver运行它,这个示例中的类似代码肯定会起作用,但为了满足要求,我需要脚本使用selenium运行headless(如果它使用特定的BrowserVersion运行,只要它是headless就可以了)
任何帮助都将不胜感激
更新:
这就是我现在正在尝试运行的代码。我只是想看到我可以让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:
这个问题很奇怪。我在家里的电脑上也试过同样的代码,它在浏览器设置为Firefox或InternetExplorer时工作得非常好。这个问题肯定是由我工作场所的计算机配置引起的,尽管我仍然不知道为什么会发生这种情况
# 1 楼答案
1)尝试添加
以前
2)或尝试
# 2 楼答案
在给出的示例代码中,它假设存在较旧的Google页面,该页面的搜索字段为name=q
页面不再以这种方式标记-尝试将
driver.findElement(By.name("q"))
更改为driver.findElement(By.cssSelector("input[id=gbqfq]")
,看看这是否解决了您的问题-至少在加载页面后,它应该能够输入到搜索栏如果您在尝试获取页面后立即调用
driver.getCurrentUrl()
,它可能没有完全加载,而是返回about:blank如果这不起作用,我们可以继续进行故障排除-很难看到无头浏览器的实际情况,因此您可能需要暂时切换到FirefoxDriver,以便准确地看到发生的情况
# 3 楼答案
尝试在Firefox中使用Selenium IDE插件,看看它在执行操作时会刮到什么。您可以将代码导出到java中,然后尝试运行它。我还会逐级检查家庭和工作电脑上的代码,看看是否有任何差异。由于DOM有时间完全加载,我已经看到代码在逐步执行时工作(当发生元素未找到错误时)。此外,尝试实例化和实际的浏览器,以便您可以直观地看到发生了什么
此外,请验证在家庭和工作站之间使用的所有软件的版本
# 4 楼答案
如果您需要headless selenium,并且firefox可以配合您的测试,请尝试使用phantomjs webdriver
# 5 楼答案
试用
您能通过检查来检查页面是否已加载吗
# 6 楼答案
我试着试一试:
如果是网络问题,请下载此工具以检查您连接的端口是否正在使用: http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx
在这种情况下非常方便
要进行进一步调试,请尝试读取源代码。 将此行放在第一个元素选择器之前和页面加载之后:
我想知道元素是否在那里