2012-11-13 9 views
5

Sono nuovo a Ruby e Watir-Webdriver. Ho una suite di automazione per il nostro sito scritta in VBScript e voglio convertirla in Ruby/Watir perché ora devo supportare Firefox. Ho scoperto che mi piace molto Ruby e sto lavorando su Watir, ma ho trascorso una settimana a provare a far visualizzare a Webdriver anche la schermata di accesso.Watir-Webdriver supporta il clic sui collegamenti in cui la destinazione è un javascript?

Il sito inizia con una "schermata di avviso" con un'area "I agree". L'utente fa clic su Accetto e viene visualizzata una schermata di accesso.

<body onload="showMessage('true')"><div id="login"><div id="message"><map name="accept"> 

<area href="javascript:showLogin();" shape="rect" coords="280,390,384,432" /> 

</map></div></div></body> 

ho bisogno di fare clic sull'area di presentare la schermata di login (che è la stessa pagina, una forma davvero, appena nascosto). Lo faccio tutto il giorno con VBScript:

objExplorer.Document.GetElementsByTagName("area")(0).click 

Tuttavia, utilizzando Watir-WebDriver, browser.area (: index, 0) .Click nulla fa.

puts browser.area(:index, 0).shape 
=>RECT 

puts browser.area(:index, 0).coords 
=>280,390,384,432 

Quindi, so che lo script può "vedere" l'elemento area e leggere i suoi attributi. Semplicemente non fa nulla con l'evento click.

Se uso un browser.goto sul href stesso:

browser.goto("javascript:showLogin();") 

il login diventa visibile, ma non può interagire con gli elementi (impostare i campi di testo per nome utente e password). Sto guardando la pagina con la finestra degli strumenti di sviluppo aperta (per visualizzare l'HTML) e dice solo "Caricamento in corso ...".

Questo è il punto in cui sono bloccato. È interessante notare che, se uso il nome del modulo di login e fare un:

browser.form(:name, "LoginForm").submit 

ricevo il messaggio pop-up dalla forma che il nome utente e la password sono vuoti, quindi c'è ancora qualche interazione.

Ovviamente, se inserisco manualmente il nome utente/password, posso inviare il modulo correttamente anche se dice "Caricamento in corso ...".

Capisco "when_present.click" e altre tecniche per attendere il browser; questi non funzionano Il mio dilemma è che non posso cliccare sull'area, e se uso il goto su javascript, il browser ignora l'automazione di Watir.

Grazie per il vostro aiuto. Anche una risposta di "Mi dispiace, Watir o Webdriver non lo farò" è accettabile per me. Mi consentirà di andare avanti e cercare altre soluzioni.

Modifica dopo domande nei commenti:

Siamo spiacenti, il sito non è pubblico, quindi non posso postare un link. Per quanto riguarda il funzionamento in Firefox, lo script funziona bene. IE sta avendo il problema. I commenti mi hanno fatto riflettere: ottengo un errore di certificato "... certificato non emesso da trusted ..." al momento della prima navigazione sul sito. L'errore del certificato che ottengo in IE può causare una sorta di disconnessione all'automazione prima di presentare il modulo? Io uso una linea sono arrivato qui su StackOverflow cliccare passato l'errore cert:

browser.goto("javascript:document.getElementById('overridelink').click()") 

Ma ora penso che forse questo potrebbe essere una parte del problema. Sono andato alle mie opzioni di IE (usando IE 9) e ho deselezionato le opzioni di sicurezza per controllare i certificati, ma senza successo.Se questo potrebbe causare il problema, dovrò negoziare con il team dell'infrastruttura per generare certificati da scaricare ogni volta che costruiscono un nuovo server.

+0

Il sito è pubblico? Il collegamento ad esso aiuterebbe. –

+1

Sembra essere supportato. Utilizzando Watir-Webdriver, facendo clic su un'area con 'href =" javascript: alert ('test'); "' ha creato l'avviso come previsto. Forse stai riscontrando alcuni problemi di compatibilità del browser? Ad esempio, 'href =" javascript: alert(); "' (si noti che il parametro no viene passato ad alert()), in IE verrà visualizzato l'avviso senza messaggi, dove come in Firefox non farà nulla. Fare clic sull'area manualmente funziona come previsto in Firefox? –

risposta

6

Ok, penso che dopo aver letto centinaia di post e ore di ricerche su Google ho finalmente trovato una soluzione al mio problema: browser.execute_script.

browser.execute_script("showLogin();") 

Era così semplice. L'uso di browser.goto è stato sospeso durante il caricamento della pagina e il webdriver è scaduto. Usare execute_script funziona perfettamente!

+0

Bello! Stavo cercando qualcosa del genere. Grazie per aver postato la tua soluzione, non sapevo di ".execute_script'. –

Problemi correlati