geb 0.12.2 中的 RequiredPageContentNotPresent 错误
RequiredPageContentNotPresent error in geb 0.12.2
在 Eclipse 中尝试 运行 作为 Maven 构建的一部分的 geb 测试时出现以下错误:
Scenario: Perform login Time elapsed: 0.009 sec <<< FAILURE!
geb.error.RequiredPageContentNotPresent: The required page content 'userName - SimplePageContent (owner: LoginPage, args: [], value: null)' is not present
错误的唯一模式似乎是每次我尝试使用 geb 选择器 select/find 一些页面内容时都会抛出它,但使用选择器应该开箱即用,对吧?
我正在使用以下工具和库:
- Eclipse Mars Java EE ID(版本:4.5.1)
- geb(版本 0.12.2)
- Selenium(版本 2.48.2)
- Groovy(版本 2.4.5)
- 黄瓜(版本 1.2.4)
这是我的 .feature 文件:
Feature: Login
Scenario: Perform login
Given the user is at the login page
When the user enters <some_uid> and <some_pwd>
Then the user should be logged in
这是我的步骤定义:
package stepdefs
import pages.LoginPage
import static cucumber.api.groovy.EN.*
Given(~"the user is at the login page") { ->
to LoginPage
assert at(LoginPage)
}
When(~"the user enters (.*) (.*)") { user, password ->
at LoginPage
page.doLogin(user,password)
}
Then(~"the user should be logged in"){ ->
assert at(LoginResultPage)
}
这是我的页面定义:
package pages
import geb.Page
class LoginPage extends Page {
static url = "/TSADG_BORGER/loginpin.do"
static at = { title == "TastSelv Borger" }
static content = {
loginForm { $($/form/$,id:"mainForm") }
userName { loginForm.find("input",id:"pnr") }
pass { loginForm.find("input",id:"tastselvKode") }
buttonLogin { loginForm.find("input",id:"bt1") }
}
def doLogin(user, password) {
userName = user
pass = password
buttonLogin.click()
}
}
这是表格的 HTML:
<form id="mainForm" action="/TSADG_BORGER/loginpin.do" role="form" method="post" autocomplete="off">
<input type="hidden" name="dispatch" value="Valider">
<div class="row skts-centered-padding">
<div class="col-sm-12">
<h1>Log på med TastSelv-kode</h1>
</div>
<div class="col-sm-6">
<div class="skts-process-form-section skts-required ">
<p><label for="pnr">Cpr-nummer</label></p>
<div>
<input id="pnr" type="text" value="" class="form-control skts-required-val" name="pnr" size="16" maxlength="14" data-validation-event="blur" data-show-type="string" data-show-facets="pattern" data-show-facet-values="/(^\d{10}$)|(^\d{6}\-\d{4}$)/" aria-required="true" aria-invalid="false" aria-describedby="pnrError " autocomplete="off">
</div>
</div>
<div class="skts-process-form-section skts-required">
<p><label for="tastselvKode">TastSelv-kode</label></p>
<div>
<input id="tastselvKode" type="password" value="" class="form-control skts-required-val" name="tastselvKode" size="16" maxlength="16" data-show-type="string" data-show-facets="pattern" data-show-facet-values="/^[^]{7,16}$/" data-validation-event="blur" aria-required="true" aria-invalid="false" aria-describedby="tastSelvKodeError " autocomplete="off">
</div>
</div>
<br>
<p>
<input type="submit" id="bt1" class="btn btn-primary skts-validate" value="Fortsæt" autocomplete="off">
</p>
</div>
</div>
</form>
感谢任何帮助和意见。
我会稍微重新安排一下您的内容部分:
static content = {
loginForm { $("form#mainForm"") }
userName { $("input#pnr") }
pass { $("input#tastselvKode") }
buttonLogin { $("input#bt1") }
}
在 Geb 中使用 jQuery 选择器!它们非常方便。请注意,如果您使用唯一 ID,$("#mainForm"") 将具有与 $("form#mainForm"") 相同的效果。第一个版本更简单,第二个版本更具表现力;)
更多信息:http://www.w3schools.com/jquery/jquery_ref_selectors.asp
并且:http://www.gebish.org/manual/current/#the-jquery-ish-navigator-api
问题已解决
我非常确信这一定是选择器的问题,所以我花了一段时间才从沙子中清醒过来并退后一步。当我这样做时,我意识到 "LoginPage" class 中的 URL 实际上重定向到了另一个页面,这是我没有预料到的。我被重定向到的页面显然不包含我在内容部分中寻找的任何对象。因此,当错误消息指出 "The required page content...is not present" 时,那是绝对正确的。
我犯了一个非常愚蠢的错误...
在 Eclipse 中尝试 运行 作为 Maven 构建的一部分的 geb 测试时出现以下错误:
Scenario: Perform login Time elapsed: 0.009 sec <<< FAILURE!
geb.error.RequiredPageContentNotPresent: The required page content 'userName - SimplePageContent (owner: LoginPage, args: [], value: null)' is not present
错误的唯一模式似乎是每次我尝试使用 geb 选择器 select/find 一些页面内容时都会抛出它,但使用选择器应该开箱即用,对吧?
我正在使用以下工具和库:
- Eclipse Mars Java EE ID(版本:4.5.1)
- geb(版本 0.12.2)
- Selenium(版本 2.48.2)
- Groovy(版本 2.4.5)
- 黄瓜(版本 1.2.4)
这是我的 .feature 文件:
Feature: Login
Scenario: Perform login
Given the user is at the login page
When the user enters <some_uid> and <some_pwd>
Then the user should be logged in
这是我的步骤定义:
package stepdefs
import pages.LoginPage
import static cucumber.api.groovy.EN.*
Given(~"the user is at the login page") { ->
to LoginPage
assert at(LoginPage)
}
When(~"the user enters (.*) (.*)") { user, password ->
at LoginPage
page.doLogin(user,password)
}
Then(~"the user should be logged in"){ ->
assert at(LoginResultPage)
}
这是我的页面定义:
package pages
import geb.Page
class LoginPage extends Page {
static url = "/TSADG_BORGER/loginpin.do"
static at = { title == "TastSelv Borger" }
static content = {
loginForm { $($/form/$,id:"mainForm") }
userName { loginForm.find("input",id:"pnr") }
pass { loginForm.find("input",id:"tastselvKode") }
buttonLogin { loginForm.find("input",id:"bt1") }
}
def doLogin(user, password) {
userName = user
pass = password
buttonLogin.click()
}
}
这是表格的 HTML:
<form id="mainForm" action="/TSADG_BORGER/loginpin.do" role="form" method="post" autocomplete="off">
<input type="hidden" name="dispatch" value="Valider">
<div class="row skts-centered-padding">
<div class="col-sm-12">
<h1>Log på med TastSelv-kode</h1>
</div>
<div class="col-sm-6">
<div class="skts-process-form-section skts-required ">
<p><label for="pnr">Cpr-nummer</label></p>
<div>
<input id="pnr" type="text" value="" class="form-control skts-required-val" name="pnr" size="16" maxlength="14" data-validation-event="blur" data-show-type="string" data-show-facets="pattern" data-show-facet-values="/(^\d{10}$)|(^\d{6}\-\d{4}$)/" aria-required="true" aria-invalid="false" aria-describedby="pnrError " autocomplete="off">
</div>
</div>
<div class="skts-process-form-section skts-required">
<p><label for="tastselvKode">TastSelv-kode</label></p>
<div>
<input id="tastselvKode" type="password" value="" class="form-control skts-required-val" name="tastselvKode" size="16" maxlength="16" data-show-type="string" data-show-facets="pattern" data-show-facet-values="/^[^]{7,16}$/" data-validation-event="blur" aria-required="true" aria-invalid="false" aria-describedby="tastSelvKodeError " autocomplete="off">
</div>
</div>
<br>
<p>
<input type="submit" id="bt1" class="btn btn-primary skts-validate" value="Fortsæt" autocomplete="off">
</p>
</div>
</div>
</form>
感谢任何帮助和意见。
我会稍微重新安排一下您的内容部分:
static content = {
loginForm { $("form#mainForm"") }
userName { $("input#pnr") }
pass { $("input#tastselvKode") }
buttonLogin { $("input#bt1") }
}
在 Geb 中使用 jQuery 选择器!它们非常方便。请注意,如果您使用唯一 ID,$("#mainForm"") 将具有与 $("form#mainForm"") 相同的效果。第一个版本更简单,第二个版本更具表现力;)
更多信息:http://www.w3schools.com/jquery/jquery_ref_selectors.asp
并且:http://www.gebish.org/manual/current/#the-jquery-ish-navigator-api
问题已解决
我非常确信这一定是选择器的问题,所以我花了一段时间才从沙子中清醒过来并退后一步。当我这样做时,我意识到 "LoginPage" class 中的 URL 实际上重定向到了另一个页面,这是我没有预料到的。我被重定向到的页面显然不包含我在内容部分中寻找的任何对象。因此,当错误消息指出 "The required page content...is not present" 时,那是绝对正确的。
我犯了一个非常愚蠢的错误...