Intellij:Geb页面对象模式导航

问题描述

在IntelliJ中开发Geb脚本时,很难导航到页面对象方法,因此,每次需要打开该页面并为方法进行搜索时就可以找到

例如:

Class LoginPage extends Page {
  static at = { waitFor("slow")  { title == "Login Page" }}
    static content = {
        txtUsername                         {$("#txtUserName")}
        txtPassword                         {$("#pwd")}
        btnLogin        (required:false)    {$("#Login")}
    }

   def login(String userName,String pwd){
      // ...
   }
}
class LoginSpec extends GebSpec {
    def "verify logic scenario" {
        given: 'Username and Password'
            def username = "abc"
            def password = "jdaafafjadfgajffaghfg"
        when: 'Fire Login URL'
            to LoginPage
        and: 'Enter Valid username,password and click on Login button'
            login(username,password)
        then: 'It should successfully and redirect to homepage'
            at HomePage
    } 

    // ...
}

在这里一键导航到登录方法并不容易。

我们有任何插件或设置可以简化此导航吗?

解决方法

您可以将光标放在页面类名称上,只需按Ctrl-B或使用Ctrl-LeftMouse即可到达那里。为了更轻松地导航和完成代码,我建议将to MyPage的结果分配给一个变量,然后将该变量用于调用页面方法,例如

class LoginSpec extends GebSpec {
  def "verify logic scenario" {
    given: "user name and password"
    def username = "abc"
    def password = "jdaafafjadfgajffaghfg"

    when: "opening login page"
    def loginPage = to LoginPage

    and: "logging it with valid credentials"
    loginPage.login(username,password)

    then: "after successful login the user gets redirected to the homepage"
    at HomePage
  } 
}

现在Ctrl-BCtrl-LeftMouse应该也可以用于您的方法调用和页面元素引用,例如loginPage.txtUsername

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...