2011-12-05 9 views
6

Quindi, nei test di regressione del selenio, ho cercato di fare doppio clic su un calendario per creare una nuova appt. Ho tentato di utilizzare doubleClick(); metodo all'interno della libreria advanceduserinteractions, ma c'è un problema; i due clic non sono abbastanza veloci/abbastanza vicini per sparare un vero doppio clic! Qualcuno ha trovato un modo per affrontare questo nei loro test?Selenium 2.0 WebDriver Advcanced Interactions Guida di DoubleClick (C#)

+0

anche, il calendario che sto utilizzando funzioni come questo: [link] (http: //google.latest.gwt- web-calendar.appspot.com) – spacebed

+0

Sfortunatamente il collegamento non consente di fare doppio clic su un calendario vuoto per creare un nuovo appuntamento. Tuttavia, ho potuto fare doppio clic su un calendario esistente e aprirlo correttamente. Ho usato l'API Actions anche se in Java. Non sono sicuro che sia qualcosa che stai cercando.Posso postare il codice se sei interessato – nilesh

+0

Hai ragione, ma anche per simulare il doppio click su un già registrato anche non funziona per la mia applicazione reale. Mi interessa però il codice, in quanto potrebbe aiutarmi a capire il C# equivoco. – spacebed

risposta

18

Questo codice funziona per me!

Actions action = new Actions(driver); 
action.doubleClick(myElemment); 
action.perform(); 
+0

L'ho provato, ma il metodo Actions doubleClick() non genera entrambi i clic abbastanza velocemente da registrarsi come doppio clic per qualche motivo .. – spacebed

+0

Bene, ho aggiornato alla build corrente di Selenium e (senza modifiche al codice) spara abbastanza velocemente ora haha. Segnalo come soluzione, perché penso che il driver Actions sia il modo più semplice/efficace per andare. – spacebed

0

hai provato a catturare l'IWebElement e quindi a fare clic due volte?

IWebElement element = driver.FindElement(By.Id("yourID")); 
element.Click(); 
element.Click(); 

Non so se questo darebbe la funzionalità desird o no, ma so che quando eseguo un evento click come quello sopra corre vicino come un doppio clic da un utente reale.

L'altra opzione è quella di fare riferimento al ThoughtWorks.Selenium.Core, tuttavia l'unico aspetto negativo di questo è che non sono sicuro che gioca bene con l'attuale IWebDriver penso che ha bisogno di un proprio esemplificazione del IWebDriver.

+0

Purtroppo questo non funziona. Ho provato questo prima di AdvancedUserInteractions, ma nessuno dei due sembra effettivamente eseguire un doppio clic. – spacebed

2

Ecco l'equivalente Java. Questo codice aprirà ciecamente il primo evento. Potresti aggiungere qualche logica per aprire un evento specifico ecc. Questo codice funziona! (testato con 2.12)

List<WebElement> events = driver.findElements(By.cssSelector("div.dv-appointment")); 
for(WebElement event:events){ 
    WebElement body = event.findElement(By.cssSelector("div.body"));    
    if(!body.getText().isEmpty()) //or open a known event 
    { 
     System.out.println(body.getText()); //open the first event 
     Actions builder = new Actions(driver); 
     Action doubleClick = builder.doubleClick(event) 
            .build(); 
     doubleClick.perform(); 
     break;     
    } 
} 
1

Anch'io ho avuto il problema dove l'evento DoubleClick del selenio lavora a Firefox, ma non ha alcun effetto in Chrome. L'aggiornamento al selenio non ha aiutato; Ho già l'ultima versione. (Il mio ambiente è Ubuntu 14.04, Python 2.7.6, Selenium 2.44.0, Firefox 35.0, Chrome 40.0.2214.91.)

Non sono sicuro del motivo per cui la risposta di CBRRacer è stata downvoted. Ho risolto con successo il problema utilizzando due eventi di clic. Funziona sia in Firefox che in Chrome. Ci sono due modi per farlo, ed entrambi hanno funzionato per me.

Il primo modo:

elem = driver.find_element_by_css_selector('#myElement') 
elem.click() 
elem.click() 

Il secondo modo:

elem = driver.find_element_by_css_selector('#myElement') 
actions = webdriver.ActionChains(driver) 
actions.click(elem).click(elem).perform() 
1

mi piace molto l'approccio qui utilizzato, in particolare coda le azioni, poi eseguire, dal momento che permette l'applicazione ripetuta della actionchain.

http://selenium-python.readthedocs.org/en/latest/api.html#selenium.webdriver.common.action_chains.ActionChains

Dall'esempio di documentazione legata:

menu = driver.find_element_by_css_selector(".nav") 
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1") 

actions = ActionChains(driver) 
actions.move_to_element(menu) 
actions.click(hidden_submenu) 
actions.perform() 
Problemi correlati