我正在使用一个库 - HtmlUnit - 我刚刚从2.4版更新到2.5版.当我编译我的代码2.5时,我得到一个奇怪的对象"无法解除引用"错误消息,我不熟悉.此外,我不明白为什么当我用两行代码编写代码时它会起作用,但是当我把代码作为单行代码时它会失败.
这是代码:
//this compiles fine
HtmlInput usernameInput = form.getInputByName("username");
usernameInput.setValueAttribute(userName);
//this fails to compile
form.getInputByName("password").setValueAttribute(passWord);
Run Code Online (Sandbox Code Playgroud)
这是我使用ANT和Java 1.6编译时得到的错误消息:
[javac] E:\workspaces\europa\PortalTestSuite\src\com\carefirst\portal\test\controller\EAITest.java:32: com.gargoylesoftware.htmlunit.html.HtmlInput cannot be dereferenced
[javac] form.getInputByName("password").setValueAttribute(passWord);
[javac] ^
Run Code Online (Sandbox Code Playgroud)
com.gargoylesoftware.htmlunit.html.HtmlInput无法解除引用?我已经看到了Autoboxing的derefernce问题,但没有看到对象.在这种情况下它意味着什么?为什么代码以一种方式而不是另一种方式工作?
在我的 html 页面中,我有这样的代码,只有当浏览器是 Firefox 时,我才安装了扩展:
if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent))
{
//relevant code
InstallTrigger.install(InstallXPI);
}
Run Code Online (Sandbox Code Playgroud)
它在每个浏览器中都能正常工作。但是当通过 htmlunit 框架使用同一页面并在 webclient 中使用 browserversion.FIREFOX_3_6 参数时。它在那里显示错误:
com.gargoylesoftware.htmlunit.ScriptException: Wrapped
com.gargoylesoftware.htmlunit.ScriptException: Wrapped
com.gargoylesoftware.htmlunit.ScriptException: ReferenceError: "InstallTrigger" is not defined.
Run Code Online (Sandbox Code Playgroud)
对此有什么想法吗?
我想访问html文件中包含的表.这是我的代码:
import java.io.*;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlTable;
import com.gargoylesoftware.htmlunit.html.*;
import com.gargoylesoftware.htmlunit.WebClient;
public class test {
public static void main(String[] args) throws Exception {
WebClient client = new WebClient();
HtmlPage currentPage = client.getPage("http://www.mysite.com");
client.waitForBackgroundJavaScript(10000);
final HtmlDivision div = (HtmlDivision) currentPage.getByXPath("//div[@id='table-matches-time']");
String textSource = div.toString();
//String textSource = currentPage.asXml();
FileWriter fstream = new FileWriter("index.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write(textSource);
out.close();
client.closeAllWindows();
}
}
Run Code Online (Sandbox Code Playgroud)
表格采用以下形式:
<div id="table-matches-time" class="">
<table class=" table-main">
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to …Run Code Online (Sandbox Code Playgroud) 当我执行这个简单的代码将网站的内容作为文本时,它会显示我无法理解的错误.
import java.io.IOException;
import java.net.MalformedURLException;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.ScriptException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class sd {
public static void main(String[] args) {
sd vip=new sd();
try {
vip.homePage();
} catch (Exception e) {
e.printStackTrace();
}
System.out.print("sssss");
}
public void homePage() throws Exception, ScriptException {
final WebClient webClient = new WebClient();
final HtmlPage page =
(HtmlPage)webClient.getPage("http://timesofindia.indiatimes.com/");
String pageAsText = page.asText();
String pageAsXML = page.asXml();
// System.out.println(pageAsXML);
System.out.println("////////////////////output//////////////////////////");
System.out.println(pageAsText);
// System.out.println(pageAsXML);
System.out.println("////////////////////output ends//////////////////////////");
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
======= EXCEPTION START ======== Exception …
我正在使用HtmlUnitDriver,这是我的代码.
HtmlUnitDriver driver = new HtmlUnitDriver(true);
driver.get("some url here");
Run Code Online (Sandbox Code Playgroud)
我得到以下例外:
Caused by: com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: SyntaxError: missing ; before statement (http://sales.liveperson.net/hcp/html/mTag.js?site=7824460#1(eval)#1)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:545)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:520)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:896)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventListeners(EventListenersContainer.java:162)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:221)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:735)
at com.gargoylesoftware.htmlunit.html.HtmlElement$2.run(HtmlElement.java:866)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:871)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1162)
at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:202)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:440)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:311)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373)
at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:346)
... 8 more
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题.
我使用HtmlUnit对我的网站进行自动化测试.我的网站使用gmaps api - 并且需要花费大量时间来发送外部站点的请求(我有几百个测试和几千个页面加载).
我需要一些方法来告诉HtmlUnit只加载本地页面(存储在IIS express中),然后加载外部资源以便我的测试运行得更快.
我有一个Web应用程序,当我向服务器发出AJAX请求以进行CRUD操作时返回JSON.这是因为我使用jQuery来处理数据而不刷新页面(MVC),所以如果我在系统中创建一个新条目,服务器将返回一个响应,该响应具有JSON格式的创建条目.jQuery管理收到的数据并在列表中呈现条目(使用先前创建的条目).
现在我用HTML单元测试它,但是如果我尝试的话
WebResponse response = page.getWebResponse()
Run Code Online (Sandbox Code Playgroud)
我得到200状态并且消息"OK".但我期待着我创建的条目的JSON数据.
如果我试试
page.asText()
Run Code Online (Sandbox Code Playgroud)
我得到当前页面的HTML(条目已经在列表中,但不是我想要的数据).
这是一个类似的问题,没有回应:Json ajax调用返回响应200 ok
PD:jQuery表单有两个字段,一个是名称的文本输入,另一个是汽车设置的选择.我将要选择的设置列表传递给此函数.使用时间戳和静态int种子自动生成名称.这是我正在使用的代码:
public void create(List<Settings> settings) throws FailingHttpStatusCodeException, MalformedURLException, IOException
{
page = webClient.getPage("localhost:8080/cars/list");
int elementsCount = getEntitiesCount();
creationSeed = elementsCount+1;
HtmlAnchor anchor = (HtmlAnchor) page.getFirstByXPath("//a[@class='action-createCar']");
page = (HtmlPage) anchor.click();
HtmlForm form = page.getFirstByXPath("//form[@class='CarsForm']");
form = page.getForms().get(0);
HtmlTextInput nameField = form.getInputByName("CarsForm-name");
nameField.setText("Test " + creationSeed + " - " + new Date().getTime());
HtmlSelect columnSelectList = (HtmlSelect) form.getSelectByName("CarsForm-settings");
if (settings != null && settings.size() > 0)
for (Settings …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 htmlunit 制作 java 应用程序以从http://www.jobolizer.com站点获取信息。所以问题是我必须用我的网址填充文本框并单击锚点以提交表单。第一部分效果很好(查找表单并用我的数据填充表单文本框),但我无法使用 getByXPath() 方法找到锚点,锚点没有名称或值。

这是我的代码:
public class JobolizerCrawler {
private final String jobolizerUrl = "http://www.jobolizer.com";
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
public JobolizerCrawler () {
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
}
public void fillTextBoxWithUrl(String vacancyURL) throws IOException {
final HtmlPage page = webClient.getPage(jobolizerUrl);
System.out.println(page.asText());
final HtmlForm form = page.getFirstByXPath("//form[@action='/phpProxy/getJOBolizerResponse_en.php']");
final HtmlTextInput input = form.getInputByName("url");
input.setText(vacancyURL);
HtmlButton button = (HtmlButton) page.getByXPath("/form[@action='/phpProxy/getJOBolizerResponse_en.php']/a[@id=lightboxlink]").get(0);
HtmlPage page2 = button.click();
String page2Text = page2.asText();
System.out.println(page2Text);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含此部分的html文件:
<td> <a href="/romarin/detail.do?ID=0"> NAME </a> </td>
Run Code Online (Sandbox Code Playgroud)
如何href使用HtmlUnit 打开此链接?
我的代码:
final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_11);
final HtmlPage page1 = webClient.getPage("file:\\" + newrfile);
final HtmlSubmitInput button = form.getInputByName("submit");
final HtmlPage page2 = button.click();
System.out.println(page2.asText());
final HtmlForm form2 = page2.getFormByName("SearchForm");
Run Code Online (Sandbox Code Playgroud) 在 java 项目中,我必须使用 HtmlUnit 来检索网页的内容。
如何搜索具有内容的元素123。它是 html 文档的一部分。引用元素没有 id、class 或 name:
....
<tr>
<td>123</td>
<td>456</td>
</tr>
....
Run Code Online (Sandbox Code Playgroud)
不可能将整个文档转换为文本然后进行搜索。