当前位置: 首页 > 知识库问答 >
问题:

在一个Geb测试中使用多个页面对象

东方旭东
2023-03-14
package Pages

import geb.Page

class loginPage extends Page {
    static url = 'login/'
    static at = {title == "Login to TalentBank"}
    static content = {
        logo {$(".center-img img")}
        emailHeader {$(".form-group label", text:"Email")}
        emailTextBox {$('#email')}
        pwdHeader {$(".form-group label", text:"Password")}
        pwdTextBox {$("#password")}
        loginButton {$("#loginButton")}
    }
}
package Pages

import geb.Page

class homePage extends Page {
    static at = {title == "Home"}
    static content = {
        tile1 {$("#page-container > div.container-fluid > div > div:nth-child(2) > div")}
    }
}
import Pages.loginPage
import Pages.homePage
import geb.spock.GebReportingSpec


class loginPageSpec extends GebReportingSpec {


    def "Log in to TalentBank Core"(){
        given:
        to loginPage
        waitFor {loginButton.isDisplayed()}

        when:
        emailTextBox.value("Ruxin")
        pwdTextBox.value("Test1234")
        loginButton.click()

        then:
        waitFor {tile1.isDisplayed()}
        at homePage
    }
}

原因是:groovy.lang.MissingPropertyException:无法将tile1解析为Pages.LoginPage的内容或导航器上下文中的属性。tile1是您忘记导入的类吗?

它在loginPage中寻找tile1,而不是主页。

共有1个答案

南宫嘉
2023-03-14

在测试中更改的位置,我还会添加页面引用,您将从自动完成中受益。

登录页面

package Pages

import geb.Page

class LoginPage extends Page {

    static url = 'login/'

    static at = {
           title == "Login to TalentBank"
    }

    static content = {
        logo         {$(".center-img img")}
        emailHeader  {$(".form-group label", text:"Email")}
        emailTextBox {$('#email')}
        pwdHeader    {$(".form-group label", text:"Password")}
        pwdTextBox   {$("#password")}
        loginButton  {$("#loginButton")}
    }
}

首页

package Pages

import geb.Page

class HomePage extends Page {

    static at = {
           waitFor {title == "Home"} // Add waitFor here to verify on page
    }

    static content = {
        tile1 {$("#page-container > div.container-fluid > div > div:nth-child(2) > div")}
    }
}
import Pages.LoginPage
import Pages.HomePage
import geb.spock.GebReportingSpec


class LoginPageSpec extends GebReportingSpec {

    def "Log in to TalentBank Core"(){
        given:
        Page loginPage = to LoginPage
        waitFor {loginPage.loginButton.isDisplayed()}

        when:
        loginPage.emailTextBox.value("Ruxin")
        loginPage.pwdTextBox.value("Test1234")

        and: "Click login"
        loginPage.loginButton.click()

        then: "Check at home page"
        Page homePage = at HomePage

        and:
        waitFor {homePage.tile1.isDisplayed()}
    }
} 
 类似资料:
  • 全面披露:我对Geb和Spock都很陌生。

  • 本文向大家介绍如何对一个页面进行测试相关面试题,主要包含被问及如何对一个页面进行测试时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、UI测试:页面布局、页面样式检查、控件长度是否够长;显示时,是否会被截断;支持的快捷键,Tab键切换焦点顺序正确性等。 2、功能测试:页面上各类控件的测试范围,测试点。结合控件的实际作用来补充检查点: 比如, 密码框是否*显示, 输入是否做trim处理等。

  • 我在scala上,我有多个针对不同类(testsuites)的测试文件,每一个都使用testcontainers(来自同一脚本的init)。 当我启动项目中的所有测试时,所有测试都失败了(由于testContainers导致与数据库的连接出现问题)。 当我分别启动测试时,所有的测试都成功了。 有没有办法为多个测试文件(testsuites)只启动一个容器?似乎只对同一文件中的测试起作用。 @Mat

  • 我正在用Spock、Groovy和Geb编写UI功能测试,实现页面对象模式。在我的事件流中,我从当前页面导航以获得结果,因此,我需要在测试中切换页面对象,但我成功地做到了 下面的测试用例:

  • 我试图重用我在另一个Geb规范中编写的一个Geb规范测试,这样我就不需要重写代码了。我总是需要在不同的页面的产品编号,所以我想做类似以下的事情; 在另一个GebSpec中,我希望使用上面的,如下所示:

  • 最近,我一直试图从一个网站上获取大量的定价,从一个页面开始,每个项目的页面都链接到起始页面。我希望运行一个脚本,允许我单击某个项目的框,删除该项目的定价和描述,然后返回起始页并继续该循环。然而,有一个明显的问题,我在刮掉第一件物品后遇到了。返回起始页后,容器没有定义,因此出现了一个陈旧的元素错误,该错误会中断循环并阻止我获取其余的项。这是我使用的示例代码,希望能够一个接一个地刮去所有项目。 然而,