无法将值传递给测试用例中的输入字段

can't pass value to the input fied in test case

我想在测试用例中将一个值传递给输入字段。然而,这是行不通的。下面是我的代码。

   class Mypage extends Page {
    static content = { 

       inputfield { withFrame ("myFrame") {$('input',name:'myInputField') } 

    }
   }
 }

然后这样测试:

given:
    String thevalue = "hello"
then:
    to Mypage
and:
    inputfield >> thevalue

通过这段代码,我得到了

StaleElementReference error and the chrome driver information

然后我通过将 thevalue 变量放在 Mypage class 中尝试了以下操作:

class Mypage extends Page {

      public  String thevalue = "hello"

      static content = { 

           inputfield { withFrame ("myFrame") 
{$('input',name:'myInputField') } 


    }
   }
 }

然后在没有给定的情况下以同样的方式进行测试:

then:
    to Mypage
and:
    inputfield >> thevalue

我仍然遇到同样的错误。

然后我尝试了第三种形式:

class Mypage extends Page {

      //public  String thevalue = "hello"

      static content = { 

           inputfield { withFrame ("myFrame") 
{ thevalue -> $('input',name:'myInputField').value(thevalue ) } 


    }
   }
 }

然后用两种方式测试:

then:
    to Mypage
and:
    inputfield("hello")

这样:

then:
    to Mypage
and:
    inputfield >> "hello"

唯一可行的方法是当我直接在 class

中传递值时
         inputfield { withFrame ("myFrame") 
{  $('input',name:'myInputField').value("hello") } 

但目标是通过测试中的值。我该怎么做

如果您按照 The Book of Geb 中的 Geb 示例进行操作,您就会拥有自己的页面并且它包含一个 iframe。示例中的 iframe 有自己的页面对象:

class PageWithFrame extends Page {
    static content = {
        myFrame(page: FrameDescribingPage) { $('#frame-id') }
    }
}

//This is your iframe page object
class FrameDescribingPage extends Page {
    static content = {
        myTextField { $('input',name:'myInputField') }
    }
}

现在要与它交互,请在测试方法中执行此操作:

def "my test method"() {
when: 
   to PageWithFrame
   withFrame(myFrame) {
       myTextField.value("whatever")
   }
   //etc
 }

如果您真的不想听从 Rushby 的建议并坚持您在问题中显示的路径,那么以下方法将起作用:

class Mypage extends Page {
    static content = { 
        inputfield { thevalue ->
            withFrame ("myFrame") { 
                $('input',name:'myInputField').value(thevalue) 
            } 
        }
    }
}

then:
    to Mypage
and:
    inputfield("hello")