我试图更好地理解测试框架,并一直在研究Selenium.我之前使用过HTMLUnit,主要是因为我需要从网站或类似网站上删除一些信息.
在编写测试自动化的背景下,Selenium与HTMLUnit的优点/缺点是什么?在我看来,Selenium设置比HTMLUnit更复杂,虽然同时有一个用于Selenium的HTMLUnitDriver,我认为它的行为方式与HTMLUnit本身完全相同?
Selenium显然提供了更强大的框架,它有Selenium RC用于pararel测试,它也有不同的浏览器驱动程序可以使用 - 虽然当你使用浏览器驱动程序时,测试实际上会打开/关闭浏览器应用程序而不是无头.
可能是我没有正确理解Selenium.一些方向和指针会很棒!
另一个注意事项 - 一个单独的问题 - 我也在考虑在移动浏览器上进行自动化测试,我看到Selenium有一个IPhoneDriver,但是这不是无头测试,因为它需要实际的iOS模拟器.
反正在移动网站上进行无头测试吗?更改用户代理是否足够?我已经看到一些关于改变用户代理的帖子似乎有他们自己的挑战,例如.在Selenium RC中设置用户代理
非常感谢!
我们正在选择我们的无头浏览器驱动程序解决方案,这将是Selenium WebDriver的一些实现.还有就是GhostDriver,利用的是PhantomJS在在一侧和后端HtmlUnitDriver其基于的HtmlUnit另一方.
PhantomJS使用Safari的渲染引擎WebKit来渲染页面,而HtmlUnitDriver使用其他浏览器没有使用的Rhino引擎(它只是"模拟"浏览器行为.最后一个事实被视为con,因为渲染行为可能与流行的浏览器.
我们认为,PhantomJS是一个更强大的候选人.但是,我们并不知道所有事情:)我们的决定是否还应考虑其他因素和权衡取舍?HtmlUnitDriver可以成为更好的解决方案的其他场景?
htmlunit phantomjs selenium-webdriver ghostdriver htmlunit-driver
我花了一天时间研究一个可以用来完成以下工作的库:
这是我没有成功的尝试:
我真的希望HtmlUnit工作,因为它似乎最适合我的解决方案.是否有任何方式或至少另一个我错过的图书馆适合我的需求?
我目前正在使用Android Studio 0.1.7,如果需要可以移动到Ellipse.
提前致谢!
有人知道是否有.net相当于htmlunit或类似的库?
我听说人们使用IKVM来转换htmlunit库.但我也听说转换后的代码很慢.
要求:
我在Java中使用HtmlUnit导航到一个网页.从那个网页我需要登录然后从那里去.我知道如何输入用户名和密码,但是有一个下拉框,我需要选择其中一个选项.如何从HtmlUnit的下拉框中选择一个选项?谢谢
我遇到了一行代码,可能会触发一些js函数,但是我怎么能解决这个问题呢?
box.setText(link.toString());
client.waitForBackgroundJavaScriptStartingBefore(10000);
box.dblClick(); //this line cause the exception
Exception in thread "main" ======= EXCEPTION START ========
EcmaError: lineNumber=[0] column=[0] lineSource=[function () {] name=[ReferenceError] sourceName=[onclick event for HtmlDivision[<div class="_119 stat_elem focus_target mtm mbl _5bsm _6dh _51z6" id="u_0_k" data-location="maincolumn" onclick="Bootloader.loadComponents("ComposerXControllerBootload", emptyFunction);">] in https://www.facebook.com/?_fb_noscript=1] message=[ReferenceError: "Bootloader" is not defined.]
com.gargoylesoftware.htmlunit.ScriptException: ReferenceError: "Bootloader" is not defined.
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:684)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:616)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:591)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:985)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:210)
at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:230)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:804)
at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:738)
at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:869)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at …Run Code Online (Sandbox Code Playgroud) 我一直在研究迄今为止可用的无头浏览器,并发现HtmlUnit被广泛使用.与HtmlUnit相比,我们有什么替代HtmlUnit可能具有优势吗?
谢谢Nayn
我有一个基于GWT的页面,我想使用HtmlUnit为它创建一个HTML快照.页面使用产品上的Ajax/JavaScript信息加载,因此大约1秒钟就会出现Loading ...消息,然后会显示内容.
问题是HtmlUnit似乎没有捕获信息,我得到的只是"Loading ..."范围.
下面是一个带有HtmlUnit的实验代码,我试着给它足够的时间等待加载数据,但它似乎没有改变任何东西,我仍然无法捕获GWT javascript加载的数据.
WebClient webClient = new WebClient();
webClient.setJavaScriptEnabled(true);
webClient.setThrowExceptionOnScriptError(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
WebRequest request = new WebRequest(new URL("<my_url>"));
HtmlPage page = webClient.getPage(request);
int i = webClient.waitForBackgroundJavaScript(1000);
while (i > 0)
{
i = webClient.waitForBackgroundJavaScript(1000);
if (i == 0)
{
break;
}
synchronized (page)
{
System.out.println("wait");
page.wait(500);
}
}
webClient.getAjaxController().processSynchron(page, request, false);
System.out.println(page.asXml());
Run Code Online (Sandbox Code Playgroud)
有任何想法吗...?
这个问题已经问了一次,但是API我改变了,答案已经无效了.
URL url = new URL("http://www.example.com");
StringWebResponse response = new StringWebResponse("<html><head><title>Test</title></head><body></body></html>", url);
HtmlPage page = HTMLParser.parseHtml(response, new TopLevelWindow("top", new WebClient()));
System.out.println(page.getTitleText());
Run Code Online (Sandbox Code Playgroud)
无法完成,因为TopLevelWindow受到保护,因为扩展/实现窗口之类的东西是荒谬的:)
有人知道怎么做吗?我觉得奇怪的是它无法轻易完成.
htmlunit ×10
java ×5
selenium ×2
.net ×1
ajax ×1
android ×1
c# ×1
ghostdriver ×1
gwt ×1
javascript ×1
phantomjs ×1
warnings ×1
web-crawler ×1
web-scraping ×1