google - ruby selenium webdriver github
子ブラウザのウィンドウが閉じると、Watir-webdriverの親ウィンドウへのリンクが切断されます。 (1)
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のリンクツールを使用して正しく設定する必要があります。 カピシェ?
開いた最初のウィンドウに戻る必要がある場合は、
@browser.windows[0]
あなたはまた、このような何かをすることができるかもしれません(テストされていません)
@browser.windows.each do |window|
if window.title.include?(target_string)
window.use
end
end