2012-02-22 14 views
1

Я заметил что-то странное. Если я использую Firefox, это нормально работает:Selenium :: WebDriver :: Ошибка :: UnhandledAlertError: сбой выполнения сценария. Открытое модальное диалоговое окно заблокировало операцию

require "selenium-webdriver" 
# => true 

driver = Selenium::WebDriver.for :firefox 
# => #<Selenium::WebDriver::Driver:0x..fc3c6738535bdb898 browser=:firefox> 

driver.execute_script "window.alert('text');" 
# => "text" 

Открывается всплывающее окно оповещения.

Если бы я сделать то же самое с Chrome открывается всплывающее предупреждение, но я получаю исключение:

driver = Selenium::WebDriver.for :chrome 
# => #<Selenium::WebDriver::Driver:0x47f3180ec45394e8 browser=:chrome> 

driver.execute_script "window.alert('text');" 
Selenium::WebDriver::Error::UnhandledAlertError: Script execution failed. Script: window.alert('text');; 
An open modal dialog blocked the operation 
    from /Users/zeljko/.rvm/gems/[email protected]/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok' 
    from /Users/zeljko/.rvm/gems/[email protected]/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize' 
    from /Users/zeljko/.rvm/gems/[email protected]/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/http/common.rb:59:in `new' 
    from /Users/zeljko/.rvm/gems/[email protected]/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/http/common.rb:59:in `create_response' 
    from /Users/zeljko/.rvm/gems/[email protected]/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/http/default.rb:64:in `request' 
    from /Users/zeljko/.rvm/gems/[email protected]/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call' 
    from /Users/zeljko/.rvm/gems/[email protected]/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/bridge.rb:590:in `raw_execute' 
    from /Users/zeljko/.rvm/gems/[email protected]/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/bridge.rb:568:in `execute' 
    from /Users/zeljko/.rvm/gems/[email protected]/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/remote/bridge.rb:314:in `executeScript' 
    from /Users/zeljko/.rvm/gems/[email protected]/gems/selenium-webdriver-2.19.0/lib/selenium/webdriver/common/driver.rb:209:in `execute_script' 
    from (irb):14 
    from /Users/zeljko/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>' 

я делаю что-то здесь не так?

Окружающая среда:

  • Mac OS X 10.7.3
  • Firefox 10.0.2
  • Chrome 17.0.963.56
  • chromedriver_mac_18.0.1022.0
  • рубин рубин 1.9.2p290
  • selenium-webdriver 2.19.0
+1

Зачем вам нужно инициировать оповещение через execute_script? Это считается неопределенным поведением в WebDriver, поэтому неудивительно, что драйверы ведут себя по-другому. – jarib

+0

@jarib: Это был просто самый простой способ создания всплывающего окна. Вы говорите, что это будет вести себя по-другому, если предупреждение было вызвано нажатием кнопки на странице (или что-то в этом роде)? Позвольте мне попробовать это ... –

+0

@jarib: Действительно, если предупреждение вызывается страницей, в Chrome или Firefox нет исключения. Добавьте свой комментарий в качестве ответа, и я соглашусь с ним. :) –

ответ

0

Попробуйте еще раз, как показано ниже с помощью хромированного ребра. Пример для Java:

ChromeDriver driver = new ChromeDriver(); 

driver.executeAsyncScript("arguments[0](); alert('Hello')"); 
try { 
    Thread.sleep(3000); 
} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
}