2014-04-25 17 views
5

Ero in difficoltà con una finestra di dialogo popup in un sito Web che sto automatizzando, per qualche motivo non farebbe clic su un pulsante nella finestra di dialogo ma interagire bene con tutto il resto. Stava anche identificando il pulsante senza problemi e potevo vedere quando lo guardavo correre che sembrava premere il pulsante mentre il colore cambiava, quindi ero un po 'bloccato.Web selenio click vs action.click qual è la differenza?

Il mio codice sembrava in origine abbastanza evidente: -

WebElement targetElement = waitforElement(threadSesh); 
targetElement.click(); 

Ma quando ho cambiato il seguente tutto sembrava funzionare assolutamente bene!

WebElement targetElement = waitforElement(threadSesh); 
Actions action = new Actions(threadSesh.driver); 
action.click(targetElement); 
action.perform(); 

Qualcuno può dirmi perché un metodo non funziona mentre l'altro funziona correttamente? Inoltre, che sia d'aiuto o meno, il sito è stato creato usando twitter bootstrap se questo fa la differenza, ma il pulsante stesso era piuttosto semplice, in questo modo.

<div class="modal hide fade in" style="width: 481px; margin-left: -241px; padding: 15px; display: block;" role="dialog" data-backdrop="static" data-keyboard="false" aria-hidden="false"> 
... 
<div class="modal-footer"> 
<a id="save-EditDetails" class="btn btn-small btn-info" type="button" style="margin-right: 7px; padding-left: 15px; padding-right: 15px;" data-bind="click: ok" href="#">Save</a> 
</div> 
</div> 

risposta

2

Io non sono sicuro circa il vostro caso specifico, ma ci sono molte differenze tra metodo click WebElement e azioni cliccare metodo. Il clic delle azioni è molto più stupido, praticamente invia l'evento click all'elemento (posizione) in cui si passa. Non interessa l'elemento, fa semplicemente clic e si sposta in avanti mentre webelement click è una chiamata bloccante (non sempre, controlla i riferimenti) e ha anche precondizioni come il WebElement da fare clic deve essere visibile. Inoltre, il clic di webElements è un metodo nullo, le azioni click restituiscono il riferimento alle azioni che stai utilizzando. Per ulteriori informazioni, consultare here e here.


modifica. Guardando il markup che hai postato, e può essere totalmente sbagliato visto che non sono un capo su CSS di bootstrap, la parte modal hide fade in e in particolare la parte fade in sembra sospetta. Sei sicuro che quando invii webelement.click(), il tuo elemento è in stato cliccabile? Che succede? Niente? Poi di nuovo, se le azioni cliccate funzionano in modo affidabile, perché non limitarci a farlo, voglio dire, se qualcosa funziona, perché sistemarlo?

+0

Cheers controllerò quei link. I clic sembrano funzionare, i pulsanti sfarfallano come se si fosse verificata un'azione di clic, ma non si registra nulla (Selenium pensa addirittura che sia stato fatto clic su OK e passa al passaggio successivo, che quindi non riesce) quindi suppongo di poter rimanere con l'azione .clic. Grazie :) – MorkPork

+0

Sto scoprendo che posso utilizzare WebElement.click(), ma non Actions.click() su un SVG incorporato. Esiste un oggetto WebElement analogico a Actions.dragAndDrop()? o Actions.release()? – InfernalRapture

0

testare solo uno scenario simile. Prima con azioni clic

actions.moveToElement(driver.findElement(By.xpath("//*[@id='relevantJobsAndCareerUpdates_1']"))).click().perform() 

e seconda con WebElement clic

driver.findElement(By.xpath("//*[@id='relevantJobsAndCareerUpdates_1']"))).click() 

Il secondo non funziona. Viene visualizzato il messaggio di errore: Causa principale: org.openqa.selenium.WebDriverException: errore sconosciuto: Elemento non selezionabile al punto (307, 24). Altro elemento riceverebbe il clic: ...

Questo è il problema simile al precedente. L'uso di Azioni risolve questo problema.

Problemi correlati