2013-11-01 93 views
1

watir webdriver和javascript对话框我有例子,不能摆脱测试中的警报。 这是JavaScript的删除警报确认与watir webdriver的JavaScript

<script> 
alert("hello.\n\nPress OK to go."); 
</script> 

然后我需要点击它,网页会加载

require 'watir-webdriver' 
require 'webdriver-user-agent' 
b = Watir::Browser.new Webdriver::UserAgent.driver(:browser => :chrome, :agent => phone.to_sym, :orientation => :landscape) 
b.goto "file:///test.html" 

误差

/var/lib/gems/1.9.1/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/remote/response.rb:51:in `assert_ok': unexpected alert open (Selenium::WebDriver::Error::UnhandledAlertError) 
    (Session info: chrome=30.0.1599.114) 
    (Driver info: chromedriver=2.4.226074,platform=Linux 3.5.0-17-generic x86) 
    from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize' 
    from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/remote/http/common.rb:59:in `new' 
    from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/remote/http/common.rb:59:in `create_response' 
    from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/remote/http/default.rb:66:in `request' 
    from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call' 
    from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/remote/bridge.rb:634:in `raw_execute' 
    from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/remote/bridge.rb:612:in `execute' 
    from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/remote/bridge.rb:166:in `getCurrentUrl' 
    from /var/lib/gems/1.9.1/gems/selenium-webdriver-2.37.0/lib/selenium/webdriver/common/driver.rb:120:in `current_url' 
    from /var/lib/gems/1.9.1/gems/watir-webdriver-0.6.4/lib/watir-webdriver/browser.rb:111:in `url' 
    from /var/lib/gems/1.9.1/gems/watir-webdriver-0.6.4/lib/watir-webdriver/browser.rb:80:in `goto' 
    from test.rb:13:in `block in <main>' 
    from test.rb:7:in `each' 
    from test.rb:7:in `<main>' 

b.execute_script "window.onbeforeunload = null" 

这个工作正常如果JavaScript是d ifhere如window.onbeforeunload

但这个警报给我错误,所有后来的工作不再工作,因为我不能点击该警报,以便页面加载。

# don't return anything for alert 
browser.execute_script("window.alert = function() {}") 

# return some string for prompt to simulate user entering it 
browser.execute_script("window.prompt = function() {return 'my name'}") 

# return null for prompt to simulate clicking Cancel 
browser.execute_script("window.prompt = function() {return null}") 

# return true for confirm to simulate clicking OK 
browser.execute_script("window.confirm = function() {return true}") 

# return false for confirm to simulate clicking Cancel 
browser.execute_script("window.confirm = function() {return false}") 

# don't return anything for leave page popup 
browser.execute_script("window.onbeforeunload = null") 

但它不工作,因为页面不加载和警报之前,我无法找到点击它的方式。

回答

4

这似乎有点哈克,但以下似乎工作。

require 'watir-webdriver' 
require 'webdriver-user-agent' 

driver = Webdriver::UserAgent.driver(:browser => :chrome, :agent => phone.to_sym, :orientation => :landscape) 
b = Watir::Browser.new driver 

begin 
    b.goto "file:///test.html" 
rescue Selenium::WebDriver::Error::UnhandledAlertError 
    b.alert.ok 
end 

# Continue to use the page 

基本上,你:

  1. 转到页
  2. 救援异常
  3. 使用的Watir的警报API在警报
  4. 点击好继续自己的方式