2013-04-05 57 views
5

在Chrome中,使用watir-webdriver,我單擊一個按鈕打開一個子瀏覽器窗口。關閉本身的孩子瀏覽器窗口顯然打破了父窗口的Watir-webdriver鏈接?

我做的:

@browser.window(title: 'Child').use 

我成功地在子窗口的各種物品進行互動。

很快,在這個窗口中有一個操作,該站點認爲這是首先打開窗口的「要點」。例如,

@browser.button(title: 'Button').click 

當執行此操作時,子窗口關閉本身。

當我告訴的Watir-的webdriver但是回去使用父窗口,我得到一個錯誤:

@browser.window(title: 'Parent').use # => results in 
# Selenium::WebDriver::Error::NoSuchWindowError: emptyScript execution failed; 
# The window could not be found 

的原因,我相信這是一個硒/的Watir-webdriver的錯誤是因爲以下代碼工作原理:

@browser.window(title: 'Child').use 
# ... Now I do various things in the child window that do NOT 
# ... cause it to close itself. They all work as expected. 
# ... 
puts @browser.window(title: 'Parent').present? #=>true 
@browser.window(title: 'Child').close 
puts @browser.window(title: 'Parent').present? #=>true 
@browser.window(title: 'Parent').use # => No error thrown 

唯一的區別是導致子窗口關閉自身的操作。

我注意到watirspec代碼沒有自閉窗口的測試用例,所以也許這是watir-webdriver中windows代碼的一個被忽視的方面。

好了,這裏是你可以運行代碼,看看這個問題自己:

require 'watir-webdriver' 
@b = Watir::Browser.new :chrome 
@b.goto 'ckeditor.com/demo#full' 
@b.div(id: 'cke_editor1').link(title: 'Link').click 
@b.link(title: 'Browse Server').wait_until_present 
@b.link(title: 'Browse Server').click 
@b.window(title: 'CKFinder').use { 
    @b.frame(title: 'CKFinder').link(id: 'r0').right_click 
    @b.frame(title: 'CKFinder').frame(id: 'cke_22_frame').wait_until_present 
    @b.frame(title: 'CKFinder').frame(id: 'cke_22_frame').link(id: 'cke_200').click 
} 

,這將導致該錯誤:

Selenium::WebDriver::Error::NoSuchWindowError: emptyScript execution failed; 
The window could not be found 

不要說我從來沒有nuthin'爲你! :-)

現在,在你問「爲什麼要測試第三方編輯工具,你瘋了嗎?」之前。我會爲你回答:我不是。

我測試的是由CKEditor工具生成的源代碼在特定情況下得到適當更新(這遠遠超出了這個問題的範圍)。設置這個要求我首先知道源代碼,以便稍後我可以驗證它是否被不同的進程正確更新。要做到這一點,我必須先使用CKEditor的鏈接工具正確設置它。 Capiche?

+0

您使用'硒能夠做這樣的事情(未測試) '或'watir' webdriver? – 2013-04-05 21:45:27

+0

Watir-webdriver - 就像它在我的第一句話中所說的那樣。 :-) – 2013-04-05 21:46:03

+0

我看着watirspec,abe在這方面是對的。我們在那裏進行測試,看看我們能看到子窗口,但就是這樣。我們沒有例如對rdoc中的示例代碼顯示進行測試以供使用.. – 2013-04-05 22:20:59

回答

1

如果您需要我們回到第一個窗口打開後,您可以使用

@browser.windows[0] 

您也可以

@browser.windows.each do |window| 
    if window.title.include?(target_string) 
    window.use 
    end 
end 
+0

如果之前該行代碼被運行沒有發生錯誤那將是巨大的(不幸的是這會發生什麼)。 – 2013-08-27 21:28:48