我想在测试用例中将值传递给输入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") }
但目标是通过测试中的值。我该怎么做
答案 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")