我试图更好地理解testing框架,并一直在研究selenium。 我之前使用过HTMLUnit ,主要是当我需要从网站或类似的东西上刮掉一些信息的时候。 在编写testing自动化的时候,Selenium和HTMLUnit的优缺点是什么? 在我看来Selenium比HTMLUnit设置起来要复杂得多,虽然同时还有一个Selenium的HTMLUnitDriver,我认为它的行为与HTMLUnit本身的行为完全相同。 Selenium显然提供了更强大的框架,它具有用于Parareltesting的Selenium RC,它也有不同的浏览器驱动程序可以使用 – 尽pipe当您使用浏览器驱动程序时,testing实际上会打开/closures浏览器应用程序而不是无头的。 可能是我不正确的理解selenium。 一些方向和指针将是伟大的! 在另一个说明 – 一个单独的问题 – 我也在做移动浏览器的自动化testing,我看到Selenium有一个IPhoneDriver ,但这不是一个无头testing,因为它需要实际的iOS模拟器。 有没有办法在移动网站上进行无头testing? 更改用户代理是否足够? 我已经看到了一些关于改变用户代理的post,这些代码似乎有自己的挑战,例如。 在Selenium RC中设置用户代理 非常感谢!
我有一个基于GWT的页面,我想使用HtmlUnit为它创build一个HTML快照。 该页面使用产品上的Ajax / JavaScript信息进行加载,因此,大约1秒钟之后将出现“加载…”消息,然后显示内容。 问题是,HtmlUnit似乎没有捕获的信息,我所得到的是“加载…”跨度。 下面是一个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); […]
我遇到了一个代码行,可能会触发一些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) […]
你知道我怎么能把closuresHtmlUnit的警告,注意,错误?
我有一些麻烦,搞清楚如何获得一些HTML的内容后, JavaScript已经更新。 具体而言,我试图从美国海军天文台主时钟获得当前时间。 它有一个h1元素,其ID为USNOclk ,显示当前时间。 当页面第一次加载时,这个元素被设置为显示“正在加载…”,然后JavaScript踢,并更新到当前时间通过 function showTime() { document.getElementById('USNOclk').innerHTML="Loading…<br />"; xmlHttp=GetXmlHttpObject(); if (xmlHttp==null){ document.getElementById('USNOclk').innerHTML="Sorry, browser incapatible. <BR />"; return; } refresher = 0; startResponse = new Date().getTime(); var url="http://tycho.usno.navy.mil/cgi-bin/time.pl?n="+ startResponse; xmlHttp.onreadystatechange=stateChanged; xmlHttp.open("GET",url,true); xmlHttp.send(null); } 所以,问题是我不知道如何获得更新的时间。 当我检查元素时,我看到“Loading …”作为h1元素的内容。 我已经仔细检查,启用JavaScript,我已经尝试调用waitForBackgroundJavaScript函数,以及希望它会给JavaScript的时间来开始更新的东西。 然而,迄今还没有成功。 我现在的代码: import com.gargoylesoftware.htmlunit._ import com.gargoylesoftware.htmlunit.html.HtmlPage object AtomicTime { def main(args: Array[String]): Unit = { val […]