2012-07-05 37 views
42

¿Cuál es el equivalente a selenium.focus() para WebDriver?Forma correcta de enfocar un elemento en Selenium WebDriver usando Java

element.sendKeys(""); 

o

new Actions(driver).moveToElement(element).perform(); 

me han tratado tanto de ellos y trabajado, pero que uno siempre quiere trabajar en todos los elementos?

¿Cuál es la forma correcta para cualquier elemento (como botón, enlace, etc.)? Esto me importa porque la función se usará en diferentes UI.

Respuesta

44

El siguiente código -

element.sendKeys("");

trata de encontrar una caja etiqueta de entrada para introducir algunos datos, mientras que

new Actions(driver).moveToElement(element).perform();

es más apropiado, ya que va a trabajar para elementos de imagen, elementos de enlace, cuadros desplegables, etc.

Por lo tanto, utilizando moveToElement() método tiene más sentido centrarse en cualquier WebElement genérico en la página web.

Para un cuadro de entrada deberá hacer clic() en el elemento para enfocar.

new Actions(driver).moveToElement(element).click().perform();

mientras que para los enlaces y las imágenes serán el ratón sobre ese elemento en particular, puede decidir hacer clic en() en él en función de lo que quiere hacer.

Si el clic() en una etiqueta de entrada no funciona -

Puesto que desea que esta función sea genérico, primero se comprueba si el WebElement es una etiqueta de entrada o no por -

if("input".equals(element.getTagName()){ 
    element.sendKeys(""); 
} 
else{ 
    new Actions(driver).moveToElement(element).perform(); 

} 

Puede hacer cambios similares según sus preferencias.

+0

¿Funciona también para cajas de entrada? – questions

+0

¿Me avisa si mi respuesta editada ayuda? –

+0

Eso debería funcionar. ¡Gracias amigo! :) – questions

11

Puede utilizar JS de la siguiente manera:

WebDriver driver = new FirefoxDriver(); 
JavascriptExecutor jse = (JavascriptExecutor) driver; 
jse.executeScript("document.getElementById('elementid').focus();"); 
1

Fwiw, que tenía lo que creo que es un problema relacionado y ocurrió una solución: Escribí una extensión de Chrome que hizo un Document.ExecCommand ('pasta ') en un área de texto con enfoque en la descarga de la ventana para llenar el elemento con el contenido del portapapeles del sistema. Esto funcionó el 100% del tiempo manualmente, pero el execCommand devolvió falsa casi todo el tiempo cuando se ejecuta bajo Selenium.

He añadido un driver.refresh() después del driver.get inicial (myChromeExtensionURL), y ahora funciona el 100% del tiempo. Esto fue con el controlador Selenium versión 2.16.333243 y Chrome versión 43 en Mac OS 10.9.

Cuando estaba investigando el problema, no vi ninguna mención de esta solución, así que pensé en documentar mi descubrimiento para los siguientes en mis pasos de Selenium/focus/execCommand ('pegar').

1

El enfoque solo funciona si la ventana está enfocada.

Use ((JavascriptExecutor)webDriver).executeScript("window.focus();"); para estar seguro.

Cuestiones relacionadas