【问题标题】:Geb Tests for pages with javascript in grails 2.3.5在 grails 2.3.5 中使用 javascript 对页面进行 Geb 测试
【发布时间】:2014-01-29 20:23:45
【问题描述】:

我正在从 grails 2.2.4 升级到 grails 2.3.5,我遇到的最后一个问题是 geb 功能测试。我已将geb 升级到0.9.2。

第一个问题是它似乎首先尝试将 geb 测试作为 spock 测试运行,即使没有任何 geb spock 测试,然后作为常规 geb 测试运行。

第二个问题是在这两种情况下启用 javascript 时,即 在 GebConfig.groovy 中

driver = {
   def driver = new HtmlUnitDriver()
   driver.javascriptEnabled = true
    return driver

} 

我得到以下异常:

|  ======= EXCEPTION START ========
Exception class=[net.sourceforge.htmlunit.corejs.javascript.EvaluatorException]
com.gargoylesoftware.htmlunit.ScriptException: syntax error (http://localhost:8081/xyz/static/IKfETRJERwBRdVMGxGDGgTIvzB2B464w7472lQKpd3b.js#156)
    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.compile(JavaScriptEngine.java:524)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.loadJavaScriptFromUrl(HtmlPage.java:1144)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:1039)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:409)
    at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:266)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:286)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:683)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:642)
    at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1170)
    at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1072)
    at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
    at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:330)
    at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3116)
    at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2083)
    at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:918)
    at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
    at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:899)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:242)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:188)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:268)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:156)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:437)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:311)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:393)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.refresh(HtmlPage.java:2234)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver$HtmlUnitNavigation.refresh(HtmlUnitDriver.java:1282)
    at geb.Browser.go(Browser.groovy:395)
    at geb.Page.to(Page.groovy:184)
    at geb.Browser.via(Browser.groovy:475)
    at geb.Browser.to(Browser.groovy:434)
    at geb.Browser.to(Browser.groovy:412)
    at geb.junit4.GebTest.methodMissing(GebTest.groovy:52)
    ......
 Caused by: net.sourceforge.htmlunit.corejs.javascript.EvaluatorException: syntax error (http://localhost:8081/xyz/static/IKfETRJERwBRdVMGxGDGgTIvzB2B464w7472lQKpd3b.js#156)
    at com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter.error(StrictErrorReporter.java:64)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.addError(Parser.java:187)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.addError(Parser.java:167)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.reportError(Parser.java:219)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.reportError(Parser.java:214)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.mustMatchToken(Parser.java:366)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.mustMatchToken(Parser.java:357)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.xmlInitializer(Parser.java:2292)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.unaryExpr(Parser.java:2252)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.mulExpr(Parser.java:2184)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.addExpr(Parser.java:2170)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.shiftExpr(Parser.java:2153)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.relExpr(Parser.java:2130)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.eqExpr(Parser.java:2104)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.bitAndExpr(Parser.java:2095)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.bitXorExpr(Parser.java:2086)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.bitOrExpr(Parser.java:2077)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.andExpr(Parser.java:2068)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.orExpr(Parser.java:2059)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.condExpr(Parser.java:2025)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.assignExpr(Parser.java:1998)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.expr(Parser.java:1979)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.statementHelper(Parser.java:1025)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.statement(Parser.java:891)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.parse(Parser.java:535)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.parse(Parser.java:456)
    at net.sourceforge.htmlunit.corejs.javascript.Context.compileImpl(Context.java:2496)
    at net.sourceforge.htmlunit.corejs.javascript.Context.compileString(Context.java:1456)
    at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory$TimeoutContext.compileString(HtmlUnitContextFactory.java:201)
    at net.sourceforge.htmlunit.corejs.javascript.Context.compileString(Context.java:1448)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$2.doRun(JavaScriptEngine.java:515)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
    ... 38 more
Enclosed exception: 
net.sourceforge.htmlunit.corejs.javascript.EvaluatorException: syntax error (http://localhost:8081/xyz/static/IKfETRJERwBRdVMGxGDGgTIvzB2B464w7472lQKpd3b.js#156)
    at com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter.error(StrictErrorReporter.java:64)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.addError(Parser.java:187)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.addError(Parser.java:167)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.reportError(Parser.java:219)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.reportError(Parser.java:214)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.mustMatchToken(Parser.java:366)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.mustMatchToken(Parser.java:357)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.xmlInitializer(Parser.java:2292)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.unaryExpr(Parser.java:2252)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.mulExpr(Parser.java:2184)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.addExpr(Parser.java:2170)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.shiftExpr(Parser.java:2153)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.relExpr(Parser.java:2130)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.eqExpr(Parser.java:2104)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.bitAndExpr(Parser.java:2095)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.bitXorExpr(Parser.java:2086)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.bitOrExpr(Parser.java:2077)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.andExpr(Parser.java:2068)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.orExpr(Parser.java:2059)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.condExpr(Parser.java:2025)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.assignExpr(Parser.java:1998)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.expr(Parser.java:1979)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.statementHelper(Parser.java:1025)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.statement(Parser.java:891)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.parse(Parser.java:535)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.parse(Parser.java:456)
    at net.sourceforge.htmlunit.corejs.javascript.Context.compileImpl(Context.java:2496)
    at net.sourceforge.htmlunit.corejs.javascript.Context.compileString(Context.java:1456)
    at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory$TimeoutContext.compileString(HtmlUnitContextFactory.java:201)
    at net.sourceforge.htmlunit.corejs.javascript.Context.compileString(Context.java:1448)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$2.doRun(JavaScriptEngine.java:515)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
    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.compile(JavaScriptEngine.java:524)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.loadJavaScriptFromUrl(HtmlPage.java:1144)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:1039)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:409)
    at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:266)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:286)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:683)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:642)
    at org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1170)
    at org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1072)
    at org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
    at org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:330)
    at org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3116)
    at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2083)
    at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:918)
    at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
    at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
    at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:899)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:242)
    at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:188)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:268)
    at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:156)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:437)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:311)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:393)
    at com.gargoylesoftware.htmlunit.html.HtmlPage.refresh(HtmlPage.java:2234)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver$HtmlUnitNavigation.refresh(HtmlUnitDriver.java:1282)
    at geb.Browser.go(Browser.groovy:395)
    at geb.Page.to(Page.groovy:184)
    at geb.Browser.via(Browser.groovy:475)
    at geb.Browser.to(Browser.groovy:434)
    at geb.Browser.to(Browser.groovy:412)
    at geb.junit4.GebTest.methodMissing(GebTest.groovy:52)
.....

当 javascript 未启用时,没有 javascript 的页面的测试通过,但有 javascript 的页面的测试得到以下结果:

java.lang.UnsupportedOperationException: Javascript is not enabled for this HtmlUnitDriver instance
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.getPageToInjectScriptInto(HtmlUnitDriver.java:639)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.executeScript(HtmlUnitDriver.java:590)
    at geb.js.JavascriptInterface._execjs(JavascriptInterface.groovy:41)
    at geb.js.JavascriptInterface.exec(JavascriptInterface.groovy:71)
    at geb.js.JQueryAdapter._callJQueryMethod(JQueryAdapter.groovy:33)
    at geb.js.JQueryAdapter.methodMissing(JQueryAdapter.groovy:60)
    at com.sra.ridge.geb.page.RidgePage.populateSecurityQuestions(RidgePage.groovy:95)
    at geb.Browser.methodMissing(Browser.groovy:194)

对于如何处理这些问题有什么建议吗?这些测试在使用 grails 2.2.3 和 geb 0.9.0-RC-1 时通过

【问题讨论】:

  • 也许您有一个以前被忽略/允许的 javascript 语法问题。如果您使用普通的浏览器驱动程序(例如 FirefoxDriver)运行它,它仍然会失败吗?您是否查看了 0.9.10.9.2 重大更改的列表? Spock 运行测试是怎么回事?
  • @Gabriel 感谢您的回复。我确实检查了重大更改列表,但没有一个与我遇到的错误相匹配。我尝试设置 FirefoxDriver 和 ChromeDriver 失败。我不认为这是一个语法问题,因为它与我们编写的 JavaScript 文件以及一些来自 jQuery 的文件有关。但问题出在资源插件上。在 Config.groovy 的测试环境中设置 grails.resources.mappers.hashandcache.excludes = ['*/'] 修复了异常的问题。在 geb 0.9.1 和 0.9.2 中,测试运行两次:作为 spock 测试和作为功能测试,但在 0.9.0-RC-1 中只运行一次。
  • 听起来你解决了你的主要问题。您可能只想回答自己的问题并接受它,这样人们就知道您想通了。至于作为 spock 测试运行,也许有一个类似的问题,您已将 Spock 配置为查找文件名的一些正则表达式,或者您 / 没有 / 已配置它并更改了默认值? (我不使用 Spock,所以这是我的猜测。)
  • Spock 现在默认带有 grails。我没有做任何 spock 配置。我不知道它为什么要运行两次测试,一次是 spock,一次是功能性的。

标签: javascript grails geb


【解决方案1】:

语法错误显然是由于资源插件和设置对javascript文件的哈希处理

grails.resources.mappers.hashandcache.excludes = ['*/'] 

在测试环境中的 Config.groovy 修复了异常的问题。

使用 geb 0.9.0-RC1 修复了测试运行两次的问题。很遗憾,我们无法升级到 0.9.2 的 geb。

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 2018-04-08
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多