NOTA: chiamiamo 'click' è il clic dell'utente finale. "js click" è un clic tramite JS
Perché il clic "via JavaScript" funziona quando un normale clic su WebDriver non funziona?
Ci sono 2 casi perché ciò accada:
I. Se stai usando PhamtomJS
Quindi questo è il comportamento noto più comune di PhantomJS
. Alcuni elementi a volte non sono selezionabili, ad esempio <div>
. Questo perché l' PhantomJS
originale è stato creato per simulare il motore dei browser (come HTML iniziale + CSS -> calcolo CSS -> rendering). Ma ciò non significa essere interagiti con il modo di un utente finale (visualizzazione, clic, trascinamento). Pertanto PhamtomJS
è supportato solo parzialmente dall'interazione degli utenti finali.
PERCHÉ FUNZIONA JS CLICK? Per quanto riguarda entrambi i clic, sono tutti clic medi. È come una pistola con 1 barile e 2 grilletti . Uno dal viewport, uno da JS. Da PhamtomJS
grande nel simulare il motore del browser, un clic JS dovrebbe funzionare perfettamente.
II. Il gestore dell'evento di "clic" deve vincolare il periodo di tempo scadente.
Ad esempio, abbiamo ottenuto un <div>
-> Facciamo alcuni calcoli
-> quindi associamo l'evento del clic al <div>
.
-> Plus con una cattiva codifica angolare (ad es. Non gestire correttamente il ciclo dell'oscilloscopio)
Potremmo finire con lo stesso risultato. Il clic non funzionerà perché WebdriverJS tenta di fare clic sull'elemento quando non ha un gestore eventi click.
PERCHÉ FUNZIONA JS CLICK? Fare clic su Js è come iniettare js direttamente nel browser. Possibile con 2 modi,
Il pugno è attraverso la console di devtools (sì, WebdriverJS comunica con la console di devtools).
Il secondo è iniettare un <script>
tag direttamente in HTML.
Per ciascun browser, il comportamento sarà diverso. Ma a prescindere, questi metodi sono più complicati che fare clic sul pulsante. Click utilizza ciò che già esiste (clic degli utenti finali), js click passa attraverso backdoor.
E per js click sembrerà un'attività asincrona. Ciò è correlato a un argomento piuttosto complesso di " attività asincrone del browser e pianificazione delle attività della CPU " (leggendo qualche tempo fa non è possibile trovare di nuovo l'articolo). In breve, ciò si verificherà principalmente poiché js click dovrà attendere un ciclo di pianificazione delle attività della CPU e verrà eseguito un po 'più lentamente dopo l'associazione dell'evento click.
(Potresti conoscere questo caso quando hai trovato l'elemento a volte cliccabile, a volte no.)
Quando sta esattamente succedendo questo e qual è il lato negativo di questa soluzione alternativa (se presente)?
=> Come menzionato sopra, entrambi significano per uno scopo, ma sull'uso dell'ingresso:
- Clic: utilizza ciò che fornisce per impostazione predefinita del browser.
- JS clic: sta attraversando backdoor.
=> Per le prestazioni, è difficile dirlo perché si basa sui browser. Ma generalmente:
- Clic: non significa più veloce ma ha solo firmato una posizione più alta nell'elenco delle attività di esecuzione della CPU.
- JS clic: non significa più lento ma solo ha eseguito l'accesso all'ultima posizione dell'elenco di pianificazione dell'attività della CPU.
=> Lati negativi:
- Clic: non sembra avere alcun aspetto negativo se non si utilizza PhamtomJS.
- JS click: molto male per la salute. È possibile fare clic accidentalmente su qualcosa che non è presente nella vista. Quando lo usi, assicurati che l'elemento sia presente e disponibile per visualizzare e fare clic come punto di vista dell'utente finale.
PS se stai cercando una soluzione.
- Usi PhantomJS? Suggerirò invece di usare Chrome senza testa. Sì, puoi configurare Chrome senza testa su Ubuntu. La cosa funziona proprio come Chrome ma non ha solo una vista e meno buggy come PhantomJS.
- Non stai usando PhamtomJS ma hai ancora problemi? Suggerirò di utilizzare ExpectedCondition del goniometro con
browser.wait()
( controllare questo per ulteriori informazioni )
(Voglio farla breve, ma è finita male. Tutto ciò che è legato alla teoria è complicato da spiegare ...)