在Chrome中,使用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
我认为这是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代码没有自动关闭窗口的测试用例,所以这可能是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 :(得分:1)
如果您需要返回打开的第一个窗口,可以使用
@browser.windows[0]
您也可以做这样的事情(未经测试)
@browser.windows.each do |window|
if window.title.include?(target_string)
window.use
end
end