尝试在Eclipse中作为Maven构建的一部分运行geb测试时出现以下错误:
task printDeps(type: org.gradle.api.tasks.diagnostics.DependencyReportTask) {
configurations = project.buildscript.configurations + project.configurations
}
错误的唯一模式似乎是每次我尝试使用geb选择器来选择/查找某些页面内容时都会抛出它,但是使用选择器应该是开箱即用的,对吗? / p>
我使用以下工具和库:
这是我的.feature文件:
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
以下是我的步骤定义:
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)
}
以下是表单的HTML:
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()
}
}
感谢任何帮助和意见。
答案 0 :(得分:1)
我会稍微重新安排您的内容部分:
static content = {
loginForm { $("form#mainForm"") }
userName { $("input#pnr") }
pass { $("input#tastselvKode") }
buttonLogin { $("input#bt1") }
}
在Geb中使用jQuery选择器!它们非常方便。请注意,如果您使用唯一ID,则$(&#34; #mainForm&#34;&#34;)将具有与$(&#34;形式#mainForm&#34;&#34;)相同的效果。第一个版本更容易,第二个版本更具表现力;)
更多信息:http://www.w3schools.com/jquery/jquery_ref_selectors.asp
并且:http://www.gebish.org/manual/current/#the-jquery-ish-navigator-api
答案 1 :(得分:0)
问题已经解决。
我非常确信它必须是选择器的一个问题,所以我花了一段时间才把头伸出沙子然后退后一步。当我这样做时,我意识到“LoginPage”类中的URL实际上是重定向到另一个页面,这是我没想到的。我被重定向到的页面显然不包含我在内容部分中寻找的任何对象。因此,当错误消息指出“所需的页面内容......不存在”时,那就绝对正确了。
我真的很傻......