in_iframe(:width =>“100%”)do | frame | //一些元素 端
那么,问题是有一种方法可以使用具体的iframe实例化新的PageObject或更改当前使用的PageObject的iframe吗?
将不胜感激任何帮助。
答案 0 :(得分:3)
我正在设想您的网页如下:
<html>
<body>
<iframe id="iframe1" src="test.htm" width="100%"></iframe>
<iframe id="iframe2" src="test.htm" width="100%"></iframe>
</body>
</html>
test.htm是:
<html>
<body>
<input id="user_login" type="text">
</body>
</html>
换句话说,有两个框架具有相同的文本字段元素。
这看起来有点hacky,但你可以采取的一种方法是定义各种元素方法。切换帧时,可以重新定义方法以使用第二帧的定位器。页面对象是:
class MyPage
include PageObject
def self.setup(iframe_locator)
in_iframe(iframe_locator) do |login_iframe|
text_field(:email_field, :id => 'user_login', frame: login_iframe)
end
end
setup(:width => "100%")
def frame=(iframe_locator)
eval %Q{
class << self
setup(#{iframe_locator})
end
}
end
end
用法是:
page = MyPage.new(browser)
# Input the text field in the first frame
page.email_field = 'hi'
# Redefine the frame locator to be the second frame
page.frame={:index=> 1, :width=>'100%'}
# Input the text field in the second frame
page.email_field = 'bye'