org openqa mac library español descargar bindings selenium selenium-rc

selenium - openqa - Hacer clic en las coordenadas sin elemento de identificación



selenium mac (10)

Como parte de mi prueba de selenio para una función de inicio de sesión, me gustaría hacer clic en un botón identificando sus coordenadas e instruir al selenio para que haga clic en esas coordenadas. Esto se haría sin identificar realmente el elemento en sí (a través de id, xpath, etc.).

Entiendo que hay otras maneras más eficientes de ejecutar un comando de clic, pero estoy buscando utilizar este enfoque específicamente para que coincida mejor con la experiencia del usuario. Gracias.


Si puede ver el código fuente de la página, siempre es la mejor opción para referirse al botón por su id o atributo NAME. Por ejemplo, tiene el botón "Iniciar sesión" con el siguiente aspecto:

<input type="submit" name="login" id="login" />

En ese caso, es la mejor manera de hacerlo

selenium.click(id="login");

Solo por curiosidad, ¿no es esa autentificación básica de HTTP? En ese caso, tal vez vea esto: http://code.google.com/p/selenium/issues/detail?id=34


Selenium no te dejará hacer esto.



Hay una manera de hacer esto. Con la API de ActionChains, puede mover el mouse sobre un elemento, ajustarlo mediante un desplazamiento (relativo al centro del elemento) y luego hacer clic en esa ubicación. He aquí cómo hacerlo usando webdriver en Python:

elem = find_element_by_selector(selector) ac = ActionChains(browser) ac.move_to_element(elem).move_by_offset(x_off, y_off).click().perform()

Ustedes son muy rápidos para descartar la pregunta. Hay una serie de razones para tener que hacer clic en una ubicación específica, en lugar de en un elemento. En mi caso, tengo un gráfico de barras SVG con un elemento de superposición que capta todos los clics. Quiero simular un clic sobre una de las barras, pero como la superposición está allí, Selenium no puede hacer clic en el elemento en sí. Esta técnica también sería valiosa para los mapas de imagen.


En C # API, utilizas acciones

var element = driver.FindElement(By...); new Actions(driver).MoveToElement(element).MoveByOffset(dx, dy).Click().Perform();

Aunque es mejor utilizar simplemente selectores Id, CSS, Xpath cuando sea posible. Pero la funcionalidad está ahí cuando es necesario (es decir, al hacer clic en elementos en ciertos lugares geográficos para la funcionalidad).


Si el uso de un add-on comercial para Selenium es una opción para usted, esto es posible: suponga que su botón está en las coordenadas x=123, y=456 . Luego puede usar Helium para hacer clic en el elemento en estas coordenadas de la siguiente manera:

from helium.api import * # Tell Helium about your WebDriver instance: set_driver(driver) click(Point(123, 456))

(Soy uno de los autores de Helium).


Las cadenas de acción pueden ser un poco quisquillosas. También puede lograr esto ejecutando javascript.

self.driver.execute_script(''el = document.elementFromPoint(440, 120); el.click();'')


Esto se puede hacer usando la clase Actions en java

Usa el siguiente código:

new Actions(driver).moveByOffset(x coordinate, y coordinate).click().build().perform();

Nota: Selenium 3 no es compatible con la clase Actions para geckodriver

Además, tenga en cuenta que las coordenadas xey son valores relativos de la posición actual del mouse. Suponiendo que las coordenadas del mouse están en (0,0) para comenzar, si desea usar valores absolutos, puede realizar la acción a continuación inmediatamente después de hacer clic en él utilizando el código anterior.

new Actions(driver).moveByOffset(-x coordinate, -y coordinate).perform();


En Selenium Java, puedes probarlo usando Javascript:

WebDriver driver = new ChromeDriver(); if (driver instanceof JavascriptExecutor) { ((JavascriptExecutor) driver).executeScript("el = document.elementFromPoint(x-cordinate, y-cordinate); el.click();"); }


Utilicé la clase Actions como muchos de los enumerados anteriormente, pero lo que encontré útil fue si necesito encontrar una posición relativa del elemento. Utilicé la medición Add-On de Firefox para obtener las coordenadas relativas. Por ejemplo:

IWebDriver driver = new FirefoxDriver(); driver.Url = @"https://scm.commerceinterface.com/accounts/login/?next=/remittance_center/"; var target = driver.FindElement(By.Id("loginAsEU")); Actions builder = new Actions(driver); builder.MoveToElement(target , -375 , -436).Click().Build().Perform();

Obtuve -375, -436 haciendo clic en un elemento y luego arrastrando hacia atrás hasta que llegué al punto en el que necesitaba hacer clic. Las coordenadas que MeasureIT dijo que acabo de restar. En mi ejemplo anterior, el único elemento que tenía en la página en la que se podía hacer clic era el enlace "loginAsEu". Entonces comencé desde allí.