Ruby 子浏览器窗口自动关闭显然会破坏Watir webdriver';s链接到父窗口?

Ruby 子浏览器窗口自动关闭显然会破坏Watir webdriver';s链接到父窗口?,ruby,webdriver,watir-webdriver,selenium-chromedriver,Ruby,Webdriver,Watir Webdriver,Selenium Chromedriver,在Chrome中,我使用watir webdriver单击一个按钮,打开一个子浏览器窗口 我有: 我成功地与该子窗口中的各种项目交互 很快,在这个窗口中完成了一个操作,站点认为这是打开窗口的“点”。e、 g @browser.button(title: 'Button').click 执行此操作时,子窗口会自动关闭 但是,当我告诉watir webdriver返回使用父窗口时,我得到一个错误: @browser.window(title: 'Parent').use # => resul

在Chrome中,我使用watir webdriver单击一个按钮,打开一个子浏览器窗口

我有:

我成功地与该子窗口中的各种项目交互

很快,在这个窗口中完成了一个操作,站点认为这是打开窗口的“点”。e、 g

@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
我之所以认为这是一个Selenium/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代码没有用于自动关闭窗口的测试用例,因此这可能是watirwebdriver中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
不要说我从来没有为你做过傻事!:-)

现在,在你问“你为什么要测试第三方编辑工具,你这个疯子?”之前,我会为你回答:我不是


我正在测试的是,由CKEditor工具生成的源代码在特定情况下得到了正确的更新(这远远超出了本问题的范围)。要设置它,我首先需要知道源代码是什么,以便稍后可以验证它是否由不同的进程正确更新。要做到这一点,我必须首先正确地设置它,使用CKEditor的链接工具。Capiche?

如果您需要返回第一个打开的窗口,您可以使用

@browser.windows[0]
您也可以这样做(未经测试)


您使用的是
selenium
还是
watir
webdriver?watir webdriver-就像我在第一句话中说的那样。:-)我看了watirspec,abe在这方面是正确的。我们有一个测试,看看我们可以看到子窗口,但就是这样。例如,我们没有对rdoc中显示的示例代码进行测试以供使用..好的。现在已经添加了复制问题的演示代码,@chuckvanderlinder注意,已经为watir webdriver创建了一个问题-如果在运行这行代码之前没有发生错误,那就太好了(不幸的是,这将发生)。
@browser.windows[0]
@browser.windows.each do |window|
  if window.title.include?(target_string)
    window.use
  end
end