Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HtmlUnitDriver似乎未加载页面_Java_Selenium_Htmlunit Driver - Fatal编程技术网

Java HtmlUnitDriver似乎未加载页面

Java HtmlUnitDriver似乎未加载页面,java,selenium,htmlunit-driver,Java,Selenium,Htmlunit Driver,我试图让HtmlUnitDriver在我的开发环境中工作。作为初学者,我尝试使用最新的selenium server jar实现以下页面中的示例: 不幸的是,每当我尝试运行此程序时,都会出现以下异常: Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element with name: q For documentation on this error, please

我试图让HtmlUnitDriver在我的开发环境中工作。作为初学者,我尝试使用最新的selenium server jar实现以下页面中的示例:

不幸的是,每当我尝试运行此程序时,都会出现以下异常:

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)
我已尝试修改代码以合并此处实现的修复:

在调用
driver.get(“http://www.google.com”
,但返回的字符串是
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时工作得非常好。这个问题肯定是由我工作场所的计算机配置引起的,尽管我仍然不知道为什么会发生这种情况。

在给出的示例代码中,它假设存在旧的Google页面,该页面的搜索字段为name=q

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

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

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

尝试将插件与Firefox一起使用,以查看它在执行操作时会遇到什么问题。您可以将代码导出到java中,然后然后试着运行它。我也会在家庭和工作计算机上逐步检查代码,看看是否有任何差异。我已经看到代码工作(当该元素未找到错误发生时)由于DOM有足够的时间完全加载,所以在逐步通过时。此外,尝试实例化和实际的浏览器,以便您可以直观地看到发生了什么


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

我会尝试尝试一下:

如果是网络问题,请下载此工具以检查您连接的端口是否正在使用:

在这种情况下非常方便

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

System.out.println(driver.getPageSource());
我想知道元素是否存在..

1)尝试添加

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

final WebElement element = driver.findElement(By.name("q"));
2) 或尝试

试用

HtmlUnitDriver driver = new HtmlUnitDriver();
您能通过检查来检查页面是否已加载吗

String pageTitle = driver.getTitle();

如果您需要headless selenium,并且firefox可以配合您的测试,请尝试使用phantomjs webdriver。

-
name
attr仍在使用。我已经试着添加你的修改,但我仍然得到一个NosTouchElementException。HtmlUnitDriver似乎坚持不加载网页。我试过启用和禁用javascript。谢谢sircapsalot,我完全错过了名称属性。我没有足够的代表来回复OP。。。。但是从编辑的代码中删除
((HtmlUnitDriver)driver).setJavascriptEnabled(true)
行会使它对我起作用,而不会引发异常。thread.sleep()部分也是不必要的,因为我认为driver.get()中内置了隐式等待。我尝试删除((HtmlUnitDriver)driver.setJavascriptEnabled(true)行,但似乎仍然存在相同的问题。顺便问一下,selenium的构建环境是如何配置的?嘿,Justin,你能分享一下你的实际测试类吗?也许我们错过了什么。是的,当然。上面的代码就是我现在要执行的。我试着在那里放置一个硬编码的sleep,看看它是否能加载页面,但似乎无法解决问题。为了学习。。尤其是新的。。你应该使用Chrome或Firefox。HTMLUN这似乎是非常不可预测的,而且,你实际上看不到事情的发生。如果你愿意,退房。这是一个很好的框架,可以帮助您开始。。当我开始使用HtmlUnit和Firefox时,我真希望我能拥有它。。firefox成功了,但它没有。这从根本上困扰着我。我建议暂时不要这样做出于我的目的,我不需要看到发生了什么。我已经得到了我想要在Firefox上运行的代码,但是在这方面有一些完全不同的问题,超出了这个问题的范围。有趣的是,上面的代码与FirefoxDriver一起工作。它只是不适用于HtmlUnitDriver,但我需要能够无头运行这个程序。为什么,你需要无头?因为我使用Selenium从这个网站上获取信息。它是作为后台任务运行的,每小时从这个网站上抓取信息,并将信息放入Excel电子表格中。不幸的是,它运行在某人用于工作的同一工作站上。最好不要每小时启动一个Mozilla Firefox窗口,这样用户就可以完成自己的工作。
String pageTitle = driver.getTitle();