geb 0.12.2中的RequiredPageContentNotPresent错误

时间:2015-11-30 08:09:44

标签: eclipse maven groovy geb cucumber-jvm

尝试在Eclipse中作为Maven构建的一部分运行geb测试时出现以下错误:

task printDeps(type: org.gradle.api.tasks.diagnostics.DependencyReportTask) {
        configurations = project.buildscript.configurations + project.configurations
}

错误的唯一模式似乎是每次我尝试使用geb选择器来选择/查找某些页面内容时都会抛出它,但是使用选择器应该是开箱即用的,对吗? / p>

我使用以下工具和库:

  • Eclipse Mars Java EE ID(版本:4.5.1)
  • geb(版本0.12.2)
  • Selenium(版本2.48.2)
  • Groovy(版本2.4.5)
  • 黄瓜(版本1.2.4)

这是我的.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()
    }
}

感谢任何帮助和意见。

2 个答案:

答案 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实际上是重定向到另一个页面,这是我没想到的。我被重定向到的页面显然不包含我在内容部分中寻找的任何对象。因此,当错误消息指出“所需的页面内容......不存在”时,那就绝对正确了。

我真的很傻......