不能将值传递给测试用例中的输入值

时间:2017-09-22 14:51:02

标签: testing groovy automated-tests spock geb

我想在测试用例中将值传递给输入fied。但这不起作用。以下是我的代码。

   class Mypage extends Page {
    static content = { 

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

    }
   }
 }

然后以这种方式测试:

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

使用此代码我得到了

  
    

StaleElementReference错误和chrome驱动程序信息

  

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

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"

唯一可行的方法是直接在类

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

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

2 个答案:

答案 0 :(得分:1)

如果您关注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
 }

答案 1 :(得分:1)

如果您真的不想遵循Rushby的建议并坚持您在问题中显示的路径,那么以下内容将有效:

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

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