2013-07-08 14 views
38

Diciamo che ho un input in un modulo (sembra un pulsante e interagisce come un pulsante) che genera alcuni dati (beh, il server genera i dati in base ai parametri del modulo, ma per l'utente, il pulsante lo fa :)) in base ai parametri nel modulo.Selenium Webdriver submit() vs click()

Quando uso click(), l'intero processo si blocca (in realtà si blocca, senza eccezioni o errori).

Dal sito Selenio:

// Now submit the form. WebDriver will find the form for us from the element 
element.submit(); 

Così WebDriver ha un metodo submit(). C'è qualche differenza, logica, tra l'utilizzo di un click() su un pulsante o submit()?

risposta

41

La funzione submit() è lì per semplificare la vita. Puoi usarlo su qualsiasi elemento all'interno dei tag del modulo per inviare quel modulo.

È inoltre possibile cercare il pulsante di invio e utilizzare click().

Quindi l'unica differenza è click() deve essere eseguita sul pulsante di invio e submit() può essere eseguita su qualsiasi elemento del modulo.

Spetta a voi.

http://docs.seleniumhq.org/docs/03_webdriver.jsp#user-input-filling-in-forms

+0

ah, quindi non c'è differenza di esecuzione. L'ho capito molto. Il congelamento deve avvenire da un'altra fonte/glitch IE ... davvero non mi piace il selenio IE +. Grazie per la risposta. – CosminO

+4

Questo non è tecnicamente vero - la differenza è che si spara l'evento click sull'elemento input di tipo submit e l'altro attiverà l'evento submit sull'elemento form. Se si dispone di codice che si attiva solo sull'evento click dell'input, questo non si verificherà quando si utilizza la funzione di invio. –

+0

C'è anche una differenza importante, almeno per la versione .net usando chromedriver, submit attenderà il caricamento della pagina, clic non è garantito.per attendere –

22

C'è una differenza tra il click() e inviare().

submit() invia il modulo ed esegue l'URL fornito dall'attributo "azione". Se hai javascript-function o jquery-plugin in esecuzione per inviare il modulo, ad es. via ajax, submit() lo ignorerà. Con click() verranno eseguite le funzioni javascript.

+1

Lo è. La maggior parte delle moderne interfacce utente attivano le funzioni javascript facendo clic su quasi tutti i pulsanti a causa dell'uso esteso di jQuery. webdriver.submit() è più simile a una funzione "form2url". Questo è il motivo per cui può essere attivato usando qualsiasi altro elemento, anche al di fuori del modulo perché non ha nulla a che vedere con il webelement, semplicemente ottenendo i valori dalla prima istanza del modulo. Se vuoi lanciare un modulo che non è il primo devi prima ottenere l'elemento del modulo o rimuoverne altri. – erm3nda

6

Inoltre, mi corregga se sbaglio, ma credo che verranno inviate non saranno attendere una nuova pagina da caricare, mentre click immediatamente continuare l'esecuzione di codice

+2

Oggi, ho dovuto sostituire la chiamata di clic con invio perché il clic non attende più il caricamento della pagina, sono sicuro che il clic stava funzionando correttamente. Deve essere qualcosa che è stato cambiato di recente, ma non posso provarlo. Come sempre con il selenio se le cose funzionano, non significa che siano fatte correttamente. –

7

ero un grande fan di submit() ma non più.

Nella pagina Web che eseguo il test, inserisco nome utente e password e faccio clic su Accedi. Quando ho invocato usernametextbox.submit(), la casella di testo della password è deselezionata (diventa vuota) e l'accesso continua a non riuscire.

Dopo aver rotto la testa per un po ', quando ho sostituito usernametextbox.submit() e sostituito con loginbutton.click(), ha funzionato come una magia.

+0

Confermato. Aveva un problema con 'submit()' sul pulsante di invio, ma non avrebbe portato attraverso l'attributo value del pulsante. usando 'click()' sul pulsante ha funzionato come un incantesimo. – Manfred

+0

Grazie, grazie, grazie. Non sono sicuro del motivo per cui l'invio non funziona però. – ndhar

+0

Lo stesso problema qui. Il mio codice è diventato complicato, perché ora devo caricare la pagina. – neves

1

submit()click() è sufficiente. Tuttavia, funziona bene se si segue con un tasto ENTER:

search_form = driver.find_element_by_id(elem_id) 
search_form.send_keys(search_string) 
search_form.click() 
from selenium.webdriver.common.keys import Keys 
search_form.send_keys(Keys.ENTER) 

provata su Mac 10.11, python 2.7.9, Selenio 2.53.5. Questo funziona in parallelo, ovvero restituisce dopo aver inserito il tasto INVIO, non attende il caricamento della pagina.

1

submit() metodo può essere utilizzato per fare clic sul pulsante presente nel modulo e l'attributo di tipo deve essere "invia".

click() metodo è utilizzato per fare clic sul pulsante nella pagina Web.

Correggimi se sbaglio.

Problemi correlati