tiempos metodos esperar espera elemento ejemplos comandos alertas java focus selenium-webdriver setfocus

metodos - Forma correcta de enfocar un elemento en Selenium WebDriver usando Java



selenium webdriver metodos (5)

El enfoque solo funciona si la ventana está enfocada.

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

¿Cuál es el equivalente de selenium.focus() para WebDriver?

element.sendKeys("");

o

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

Los probé a los dos y funcionaron, pero ¿cuál funcionaría siempre con 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.


El siguiente código -

element.sendKeys("");

intenta encontrar un cuadro de etiqueta de entrada para ingresar cierta información,

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

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

Por lo tanto, usar el método moveToElement () tiene más sentido enfocarse 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 el mouse estará sobre ese elemento en particular, puede decidir hacer clic () en él dependiendo de lo que desee hacer.

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

Como desea que esta función sea genérica, primero verifica si webElement es una etiqueta de entrada o no,

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

Puede hacer cambios similares según sus preferencias.


Este código en realidad no proporciona foco:

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

Proporciona un efecto de desplazamiento.

Además, el código JS .focus () requiere que la ventana esté activa para poder funcionar.

js.executeScript("element.focus();");

He descubierto que este código funciona:

element.sendKeys(Keys.SHIFT);

Para mi propio código, uso ambos:

element.sendKeys(Keys.SHIFT); js.executeScript("element.focus();");


FWIW, tuve lo que creo que es un problema relacionado y se me ocurrió una solución alternativa: escribí una extensión de Chrome que hacía un documento.execCommand (''pegar'') en un área de texto con foco 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.

Agregué 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'').


Puedes usar JS como abajo:

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