请帮忙。
我有页面登录/ auth.gsp
在正文中包含以下代码
<div id="page-wrap">
<div class="login-block">
<g:if test="${flash.message}">
<h3 class='login_message'>${flash.message}</h3>
</g:if>
<g:else>
<h3>IMMS Login</h3>
</g:else>
<form action='${postUrl}' method='POST' id='loginForm' class='cssform' autocomplete='off'>
<p>
<label for='username'><g:message code="auth.username.label" default="User Name"/></label>
<input type='text' class='text_' name='j_username' id='username'/>
</p>
<p>
<label for='password'><g:message code="auth.password.label" default="Password"/></label>
<input type='password' class='text_' name='j_password' id='password'/>
</p>
<p class="submit-wrap">
<input type='submit' value="${message(code: 'default.button.Login.label', default: 'Login')}"/>
</p>
</form>
</div>
<div class="image-block"></div>
</div>
在test / functional / pages目录下,我有LoginPage
package pages
import geb.Page
class LoginPage extends Page {
static url = "login/auth/"
static at = {
userName.text() == ""
}
static content = {
userName { $("input", name : "j_username") }
password { $("input", name : "j_password") }
loginButton(to: IndexPage){ $(".submit-wrap").find("input").first() }
}
}
这是我的测试代码
import geb.spock.GebReportingSpec
import pages.*
import spock.lang.Stepwise
@Stepwise
class BaseSpec extends GebReportingSpec {
String getBaseUrl() {
return "http://localhost:8080/IMMS/"
}
def "open URL"() {
when:
to LoginPage
then:
at LoginPage
}
}
我运行测试但失败了。这是报告
<?xml version="1.0" encoding="UTF-8" ?>
<testsuite errors="0" failures="1" hostname="SGCDMSSVR" name="BaseSpec" tests="1" time="24.715" timestamp="2011-07-12T07:00:04">
<properties />
<testcase classname="BaseSpec" name="open URL" time="24.693">
<failure message="Condition not satisfied:
at LoginPage
|
false
" type="junit.framework.AssertionFailedError">junit.framework.AssertionFailedError: Condition not satisfied:
at LoginPage
|
false
at BaseSpec.open URL(BaseSpec.groovy:18)
</failure>
</testcase>
<system-out><![CDATA[--Output from open URL--
]]></system-out>
<system-err><![CDATA[--Output from open URL--
]]></system-err>
</testsuite>
有什么想法可以帮助我吗?我错过了一些配置或类似jQuery的导航是不正确的?
对于测试,我正在使用“功能测试开发”插件。
更新: 最初我使用GebConfig完全来自The sample. 我刚刚注意到默认驱动程序是HTMLUnit。
当我使用命令控制台中的Functional Test Development功能运行功能测试时。
grails develop-functional-tests
我选择运行所有功能测试的选项。控制台显示测试失败。
当我将默认驱动程序更改为Firefox时。 它仍然失败,但我可以看到它自动打开Firefox浏览器并打开URL:
http://localhost:8080/IMMS/login/auth.gsp
并且无法打开URL 404.我认为这就是测试失败的原因。
我尝试从IDE运行以下内容。
grails test-app -functional
它工作正常,Firefox浏览器打开,它执行了编写的测试脚本和测试通过。
所以,我在这里修改标题。现在的重点是grails的功能测试开发插件。 也许你们有没有尝试过这个插件并且有答案? 感谢。
PS:我允许修改这个问题吗?或者我应该在stackoverflow中创建新问题吗?答案 0 :(得分:3)
at
的{{1}}条件失败(要么您不在预期页面中,要么标记中存在某些问题导致条件失败)。您可以在其中加入LoginPage
来获取更多信息。
像:
assert
这应该告诉你选择器的实际价值是什么。
无论如何,我认为这种情况很脆弱。对于页面识别,您最好检查文档的标题或某些特定的字符串,例如页眉。在您的情况下,我会匹配package pages
import geb.Page
class LoginPage extends Page {
static url = "login/auth/"
static at = {
assert userName.text() == ""
true
}
static content = {
userName { $("input", name : "j_username") }
password { $("input", name : "j_password") }
loginButton(to: IndexPage){ $(".submit-wrap").find("input").first() }
}
}
标头。即:
<h3>
(结尾的那个static at = {
assert $('h3').text() =~ /IMMS Login/
true
}
是因为你已经断言条件,但是断言的值为true
,所以at检查不会失败。)。
另外,请查看this博文,了解更一致的替代方案。
答案 1 :(得分:0)
我已经问过grails插件here的创建者。 所以基本上,它不是关于测试代码问题。我只需要使用不同的端口进行测试。