Selenio – Haga clic en cierta posición

Usando la versión Python de Selenium, ¿es posible hacer clic en algún elemento en el DOM y especificar las coordenadas donde desea hacer clic en él? La versión de Java tiene el método clickAt , que en realidad hace exactamente lo que estoy buscando, pero no puede encontrar el equivalente en Python.

¡Esto debería hacerlo! Es decir, es necesario utilizar cadenas de acción de webdriver. Una vez que tenga una instancia de eso, simplemente registre un montón de acciones y luego llame a perform() para realizarlas.

 from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.google.com") el=driver.find_elements_by_xpath("//button[contains(string(), 'Lucky')]")[0] action = webdriver.common.action_chains.ActionChains(driver) action.move_to_element_with_offset(el, 5, 5) action.click() action.perform() 

Esto moverá el mouse 5 píxeles hacia abajo y 5 píxeles hacia la derecha desde la esquina superior izquierda del botón. Me siento afortunado . Luego hará click() .

Tenga en cuenta que debe utilizar perform() . Si no, nada pasará.

La razón por la que se está confundiendo es que clickAt es un antiguo método v1 (Selenium RC).

WebDriver tiene un concepto ligeramente diferente, de ‘Acciones’ .

Específicamente, el constructor de ‘Acciones’ para los enlaces de Python vive aquí .

La idea del comando clickAt es hacer clic en una determinada posición en relación con un elemento en particular.

Lo mismo se puede lograr dentro de WebDriver, usando el constructor ‘Acciones’.

Esperemos que esta documentación actualizada pueda ayudar.

Personalmente, no he usado este método, pero al buscar en el código fuente de selenium.py , he encontrado los siguientes métodos que parecen hacer lo que usted desea: buscan envolver el clickAt :

 def click_at(self,locator,coordString): """ Clicks on a link, button, checkbox or radio button. If the click action causes a new page to load (like a link usually does), call waitForPageToLoad. 'locator' is an element locator 'coordString' is specifies the x,y position (ie - 10,20) of the mouse event relative to the element returned by the locator. """ self.do_command("clickAt", [locator,coordString,]) def double_click_at(self,locator,coordString): """ Doubleclicks on a link, button, checkbox or radio button. If the action causes a new page to load (like a link usually does), call waitForPageToLoad. 'locator' is an element locator 'coordString' is specifies the x,y position (ie - 10,20) of the mouse event relative to the element returned by the locator. """ self.do_command("doubleClickAt", [locator,coordString,]) 

Aparecen en el objeto de selenium y aquí está su documentación de API en línea .