2012-02-19 5 views
14

Ho una pagina con qualcosa di simile:modale finestra presente (selenio :: WebDriver :: Error :: UnhandledAlertError) dopo che respinge confermare comparsa

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

Quando vado alla pagina e cliccare sul link:

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

conferma popup. Posso respingerlo con questo:

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

ma l'ottengo questo messaggio di errore:

[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>' 

Che cosa sto facendo di sbagliato?

Ambiente:

  • Mac OS X 10.7.3
  • Firefox 10.0.2
  • Rubino 1.9.3p125
  • selenio WebDriver 2.19.0
  • watir-WebDriver 0.5.3

risposta

4

Mi riferirò a questa risposta https://stackoverflow.com/a/8172888/409820 dove ho spiegato sull'utilizzo di metodi come browser.confirm. Gli esempi dei quali sono un po 'confusi poiché provengono direttamente dai test, e se non si capisce il contesto che c'erano più pulsanti sulla pagina di test, e quello che causa una finestra di conferma ha un valore di' conferma ' quindi il comando 'inner' racchiuso dal metodo non ha molto senso.

I comandi nel ciclo (o blocco) che seguono il metodo di conferma è il comando che provoca il verificarsi del popup.

Quindi un esempio migliore di come utilizzare questi metodi sarebbe stato qualcosa di simile

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

o

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

in altre parole, il modo in cui funziona utilizzando .confirm(response) {block} è un po 'come dire watir " ok il comando che ti sto dando nel blocco farà apparire una finestra di conferma, e quando lo farà voglio che tu prenda l'azione specificata da response "

Quindi, dove stai andando male è il comando all'interno del blocco, devi spostare il 'browser.button.click' o qualcosa di simile all'interno del blocco. Il tuo codice sarebbe poi finiscono per guardare qualcosa di simile

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

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

ho cambiato la vostra azione click per essere un po 'più specifico, individuando il pulsante in base all'attributo valore nel codice HTML che hai fornito. Se eri sicuro che sarebbe stato il primo pulsante della pagina, potresti modificare l'ultima riga in

browser.confirm(true) {browser.button.click} 
+1

Grazie Chuck. C'è una birra che ti aspetta ad Austin. :) La cosa divertente è che non vedo apparire il popup quando uso 'browser.confirm (true) {browser.button.click}'. Suppongo che sovrascriva la funzione JavaScript 'window.confirm', simile a' browser.execute_script ("finestra.confirm = function() {return true} ")' –

+0

Potrebbe essere, tuttavia il codice stava eseguendo il clic che avrebbe dovuto farlo apparire, quindi non sono sicuro di cosa c'è lassù. Ti porterò sulla birra. voi uno in cambio se trovate il tempo di ottenere le informazioni sopra e nell'altra risposta collegata nel wiki watir o in un posto che è più facile per i nostri utenti di trovare. –

+0

Il piano è mettere tutto nel libro, ma io solo non ha avuto il tempo finora. Dovrebbe essere nel libro prima di Bazaar. –