web-dev-qa-db-ja.com

確認ポップアップを閉じた後、モーダルダイアログが表示されます(Selenium :: WebDriver :: Error :: UnhandledAlertError)

次のようなページがあります。

<input type="button" onclick="confirm('confirm popup');" value="click" />

このページに移動してリンクをクリックすると、次のようになります。

require "watir-webdriver"
browser = Watir::Browser.new
browser.goto "page.html"
browser.button.click

確認ポップアップが表示されます。私はこれでそれを却下することができます:

require "watir-webdriver/extensions/alerts"
browser.confirm(true) {browser.button(:value => 'Confirm').click}

しかし、私はこのエラーメッセージを受け取ります:

[remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/command_processor.js:10302:in `unknown': Modal dialog present (Selenium::WebDriver::Error::UnhandledAlertError)
    from [remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/driver-component.js -> file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/dispatcher.js:85:in `unknown'
    from [remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/driver-component.js -> file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/dispatcher.js:516:in `unknown'
    from [remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/driver-component.js -> file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/dispatcher.js:351:in `unknown'
    from [remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/driver-component.js -> file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/webdriverserver.js:47:in `unknown'
    from [remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/httpd.js:1935:in `unknown'
    from [remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/httpd.js:2261:in `unknown'
    from [remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/httpd.js:1168:in `unknown'
    from [remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/httpd.js:1616:in `unknown'
    from [remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/httpd.js:1464:in `unknown'
    from [remote server] file:///var/folders/yx/bz_81fc143b4r9pyhks300m00000gn/T/webdriver-profile20120218-1562-7b7q8d/extensions/[email protected]/components/httpd.js:1333:in `unknown'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/Selenium-webdriver-2.19.0/lib/Selenium/webdriver/remote/response.rb:52:in `assert_ok'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/Selenium-webdriver-2.19.0/lib/Selenium/webdriver/remote/response.rb:15:in `initialize'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/Selenium-webdriver-2.19.0/lib/Selenium/webdriver/remote/http/common.rb:59:in `new'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/Selenium-webdriver-2.19.0/lib/Selenium/webdriver/remote/http/common.rb:59:in `create_response'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/Selenium-webdriver-2.19.0/lib/Selenium/webdriver/remote/http/default.rb:64:in `request'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/Selenium-webdriver-2.19.0/lib/Selenium/webdriver/remote/http/common.rb:40:in `call'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/Selenium-webdriver-2.19.0/lib/Selenium/webdriver/remote/bridge.rb:590:in `raw_execute'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/Selenium-webdriver-2.19.0/lib/Selenium/webdriver/remote/bridge.rb:568:in `execute'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/Selenium-webdriver-2.19.0/lib/Selenium/webdriver/remote/bridge.rb:314:in `executeScript'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/Selenium-webdriver-2.19.0/lib/Selenium/webdriver/common/driver.rb:209:in `execute_script'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/watir-webdriver-0.5.3/lib/watir-webdriver/browser.rb:129:in `execute_script'
    from /Users/zeljko/.rvm/gems/Ruby-1.9.3-p125/gems/watir-webdriver-0.5.3/lib/watir-webdriver/extensions/alerts.rb:39:in `confirm'
    from popup.rb:7:in `<main>'

私は何が間違っているのですか?

環境:

  • Mac OS X 10.7.3
  • Firefox 10.0.2
  • Ruby 1.9.3p125
  • Selenium-webdriver 2.19.0
  • watir-webdriver 0.5.3
14
Željko Filipin

この回答を参照します https://stackoverflow.com/a/8172888/40982 ここでbrowser.confirmなどのメソッドの使用について説明しました。これらの例はテストから直接得られたものであり、テストページに複数のボタンがあり、確認ダイアログを表示するボタンの値が「確認」であるというコンテキストがわからない場合は、少し混乱します。その場合、メソッドでラップされた「inner」コマンドはあまり意味がありません。

確認メソッドに続くループ(またはブロック)内のコマンドは、ポップアップを発生させるコマンドです。

したがって、これらのメソッドの使用方法のより良い例は、次のようなものでした。

_alert_message_text = browser.confirm(true) do
  #watir code that causes confirm popup goes here
end 
_

または

_alert_message_text = browser.confirm(true) {#code that causes confirm popup}
_

言い換えると、これが.confirm(response) {block}を使用して機能する方法は、watirに「わかりました。ブロックで指定したコマンドを実行すると確認ダイアログが表示されます。その場合は、 response "で指定されたアクション

したがって、ブロック内のコマンドが間違っている場合は、「browser.button.click」などをブロック内に移動する必要があります。その場合、コードは次のようになります。

_require "watir-webdriver"
require "watir-webdriver/extensions/alerts"

browser = Watir::Browser.new
browser.goto "page.html"
browser.confirm(true) {browser.button(:value => 'click').click}
_

クリックアクションをもう少し具体的に変更し、指定したHTMLのvalue属性に基づいてボタンを識別しました。それが常にページの最初のボタンになると確信している場合は、最後の行を次のように変更できます。

_browser.confirm(true) {browser.button.click}
_