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