2011-12-05 15 views
6

Por lo tanto, en mis pruebas de regresión de selenio, he intentado hacer doble clic en un calendario para crear una nueva cita. He intentado usar el doubleClick(); método dentro de la biblioteca de interacciones de usuario avanzado, pero hay un problema; los dos clics no son lo suficientemente rápidos/lo suficientemente cerca como para disparar un doble clic real! ¿Alguien ha encontrado una manera de lidiar con esto en sus pruebas?Selenium 2.0 WebDriver Advcanced Interactions Ayuda de DoubleClick (C#)

+0

También, el calendario que estoy usando funciones como éste: [link] (http: //google.latest.gwt- web-calendar.appspot.com) – spacebed

+0

Desafortunadamente, el enlace no permite hacer doble clic en un calendario vacío para crear una nueva cita. Sin embargo, pude hacer doble clic en un calendario existente y abrirlo con éxito. Usé Actions API aunque en Java. No estoy seguro de si eso es algo que estás buscando.Puedo publicar el código si está interesado – nilesh

+0

Tiene razón, pero incluso para simular el doble clic en una ya registrada, incluso no funciona para mi aplicación real. Sin embargo, estoy interesado en el código, ya que puede ayudarme a calcular el equivalente de C#. – spacebed

Respuesta

18

¡Este código funciona para mí!

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

Lo he intentado, pero el método Actions doubleClick() no activa ambos clics lo suficientemente rápido como para registrarse como un doble clic por algún motivo. – spacebed

+0

Bueno, actualicé a la compilación actual de Selenium, y (sin cambios en el código)) Dispara lo suficientemente rápido ahora jaja. Sin embargo, marcaré esto como la solución, ya que creo que el controlador de Actions es el camino más simple/más efectivo. – spacebed

0

¿Ha intentado capturar IWebElement y luego hacer clic dos veces?

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

No sé si esto le daría la funcionalidad desird o no, pero sé que cuando yo haga un evento de clic como la de arriba se ejecuta tan cerca como un doble clic de un usuario real.

La otra opción es hacer referencia a la ThoughtWorks.Selenium.Core, sin embargo, el único inconveniente de esto es que no estoy seguro de que juega bien con la corriente IWebDriver creo que necesita su propia instancia de la IWebDriver.

+0

Lamentablemente esto no funciona. Intenté esto antes de AdvancedUserInteractions, pero ninguno parece realizar un doble clic. – spacebed

2

Aquí está el equivalente de Java. Este código abrirá ciegamente el primer evento. Podría agregar algo de lógica para abrir un evento específico, etc. ¡Este código funciona! (probado 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

yo también tenía el problema en el caso de DoubleClick de selenio funciona en Firefox pero no tiene efecto en Chrome. La actualización a Selenium no ayudó; Ya tengo la última versión. (Mi entorno es Ubuntu 14.04, Python 2.7.6, Selenium 2.44.0, Firefox 35.0, Chrome 40.0.2214.91.)

No estoy seguro de por qué la respuesta de CBRRacer fue downvoted. Trabajé exitosamente alrededor del problema al usar dos eventos de clic. Esto funciona tanto en Firefox como en Chrome. Hay dos formas de hacerlo, y ambos funcionaron para mí.

La primera manera:

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

La segunda manera:

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

me gusta bastante el enfoque utilizado aquí, sobre todo en cola las acciones en primer lugar, a continuación, llevar a cabo, ya que permite la aplicación repetida de la Actionchain.

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

A partir del ejemplo de documentación vinculada:

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() 
Cuestiones relacionadas