我預想你的網頁是這樣的:
<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>
換句話說,有具有相同文本字段元素的兩幀。
這看起來有點不方便,但您可以採取的一種方法是定義各種元素方法。當您切換幀時,您可以重新定義使用第二幀的定位器的方法。 Page對象是:
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'
你能澄清你所說的「具體的iframe」的意思是什麼,爲什麼你需要「改變IFRAME」?根據問題描述,這聽起來像是在兩個不同的iframe中有兩個元素,這意味着只有兩個in_iframe訪問器? –
對不起,我會嘗試更具體地描述我的問題。 從開始我的步驟只使用一個iframe-iframe1,然後在測試期間運行驅動程序按下創建iframe2的按鈕,所有其他步驟需要在iframe2中完成,但驅動程序繼續與iframe1中的元素交互(原因iframe1和iframe2具有相同的元素)。 所以我想要做這樣的事情:@ current_page.frame = browser.iframes(:width => 100%)[1]改變當前工作的驅動程序iframe。 – Smooyk
我有類似的問題,最終不得不放棄Cheezy的寶石,贊成像Alister Scott所描述的那樣「滾動我自己」:http://watirmelon.com/2012/06/04/roll-your-own-page-對象/ –