explicacion examples español eclipses astronomia java firefox junit selenium

java - español - selenium eclipse examples



¿Puede el selenio manejar autocompletar? (17)

Descubrí que tenía que centrarme en el campo antes de escribir typeKeys para que funcionara.

Tengo un caso de prueba que requiere escribir un valor parcial en un campo de texto basado en ajax y verificar que la lista tenga el contenido esperado. Si lo hace, seleccione el contenido. ¿Alguna idea de cómo hacer que esto funcione?


El comando de tipo puede no ser suficiente para activar el autocompletado. De lo contrario, las sugerencias de Dave Webb son acertadas. Mi única adición sería que podría necesitar el comando typeKeys , que hace que se activen eventos de JavaScript ligeramente diferentes, lo que puede ser más probable que active el widget de autocompletar.


En algún momento el TypeKeys no funciona. En este momento puedes usar keyDown.

haga clic en el cuadro de entrada y escriba el valor y la clave en el cuadro.


En el texto de ayuda para el comando typeKeys dice:

En algunos casos, es posible que necesite usar el simple comando "tipo" para establecer el valor del campo y luego el comando "typeKeys" para enviar los eventos de pulsación de tecla correspondientes a lo que acaba de escribir.

Así que usa esta combinación de

type(selector, text); typeKeys(selector, text);

Esto parece funcionar bien.



Haría esto de la siguiente manera:

  • type para introducir el valor en el campo de texto.
  • waitForTextPresent o verifyTextPresent para verificar el contenido autocompletado
  • click o mouseDown mouse para hacer clic en el elemento en la lista de autocompletar

El truco será hacer que el click final esté en el lugar correcto. Debería poder usar una expresión XPath que busque el texto que espera encontrarlo.


Hay pocas respuestas con código aquí. Entonces, haré mi contribución.

El código que estoy usando para seleccionar un elemento en el componente de autocompletar de PrimeFaces 2.2:

driver.findElement(By.id(codigoBanco_input)).sendKeys("text"); waitForElementLocated(By.cssSelector(listItensSelector), 5); List<WebElement> listItems = driver.findElements(By.cssSelector(listItensSelector)); Actions builder = new Actions(driver); builder.moveToElement(listItems.get(0)).build().perform(); WebDriverWait wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(itemSelector))); driver.findElement(By.cssSelector(itemSelector)).click();


La respuesta de Patrick es definitivamente importante, también encontré que se necesita enfoque y mouseDown en las últimas versiones de la interfaz de usuario de Jquery. Grabé un video de una prueba para que pueda verlo ejecutándose en Sauce Labs: https://saucelabs.com/jobs/ad8c561be39bb7a42c9bb3a063214c95


Para WebDriver , intente esto

El siguiente código es para buscar un texto automáticamente desde la sugerencia automática; principalmente para un elemento de la lista .

driver.findElement(By.id("your searchBox")).sendKeys("your partial keyword"); Thread.sleep(3000); List <WebElement> listItems = driver.findElements(By.xpath("your list item locator")); listItems.get(0).click(); driver.findElement(By.id("your searchButton")).click();


Por favor, use typeKeys en lugar de type. También use mouseDown en lugar de hacer clic. Funciona bien.


Pude resolver esto usando la siguiente función: La siguiente función toma el texto que desea seleccionar como parámetro. Por ejemplo: si desea seleccionar "javascript", simplemente escriba "java" en su cuadro de texto y pase el texto que desea seleccionar, en este caso específico es "javascript".

public void selectOptionWithText(String textToSelect) { try { //Add the below sleep if necessary // Thread.sleep(1000); WebElement autoOptions = driver.findElement(By.className("autocomplete")); List<WebElement> optionsToSelect = autoOptions().findElements(By.tagName("div")); for (WebElement option : optionsToSelect) { if (option.getText().equals(textToSelect)) { System.out.println("Trying to select: " + textToSelect); option.click(); break; } } } catch(Exception e){ System.out.println("Error"); } }


Puede que esto no funcione para todos, pero simplemente agregué un método que me permitió escribir caracteres con un retraso.

Actions builder = new Actions(this.webDriver); WebElement element = this.getWebElement(); for (char c : value.toCharArray()) { builder = builder.sendKeys(element, c + ""); builder.pause(100); } builder.build().perform();

Luego encontré el elemento que quería hacer clic (

resultsElement.findElement(By.xpath("//li[.=''" + valueLabel + "'']"))

Donde contenedor es el resultado, el elemento es el elemento web que contiene el conjunto de resultados y la etiqueta de valor es el valor que quiero hacer clic.

Una vez más, puede que no funcione para todos, pero funcionó para mí y me pareció prudente compartirlo.


Tu pregunta es un poco ambigua.

La mayoría de los navegadores mantienen un caché de valores que se basa en el nombre del campo: este es el valor que su navegador sugiere como autocompletado, aunque es posible que nunca haya visitado el sitio anteriormente. Esta función no es estándar en todos los navegadores y no habrá una forma estándar para que el selenio detecte / analice esto. Aún puedes hacerlo, pero tendrás que hacer funciones de javascript que determinen los valores por ti mismo. Luego puede usar "eval" en selenio para ejecutar estas funciones. No he visto ninguna biblioteca js que pueda decirle estos valores de una manera compatible con todos los navegadores.

La otra alternativa es que use ajax para hacer un envío del lado del servidor del valor ingresado parcialmente. En este caso, solo es cuestión de escribir los valores en el cuadro de texto y afirmar que los valores esperados se activan. Normalmente, las sugerencias de autocompletar aparecen en alguna capa en el lado del cliente.


Tuvimos algunos problemas con typeKeys. sendKeys parece convertirse en la solución final, pero aún es experimental. De la referencia:

Este comando es experimental. Puede reemplazar el comando typeKeys en el futuro.

Para aquellos que estén interesados ​​en los detalles, a diferencia del comando typeKeys, que intenta disparar los eventos keyDown, keyUp y keyPress, este comando está respaldado por los átomos de Selenium 2 y proporciona una implementación mucho más sólida que se mantendrá en el futuro.


Una pequeña variación usando la respuesta de Prashanth:

/** * Selects the element at position idx from the autocomplete combo, considering the partialKeyword * @param driver * @param element * @param partialKeyword * @param idx * @throws InterruptedException */ public static void selectAutoCompleteValue(WebDriver driver, WebElement element, String partialKeyword, Integer idx) throws InterruptedException{ element.sendKeys(partialKeyword); Thread.sleep(1000); List <WebElement> listItems = driver.findElements(By.cssSelector(".ui-autocomplete-item.ui-autocomplete-list-item")); listItems.get(idx).click(); }

¡Espero que esto ayude!


Utilicé estos comandos en la versión de Selenium IDE 2.9.1 para el campo de texto autocompletado. sendKeys (localizador, valor) clickAt (localizador, coordString) clic (localizador)


Utilicé la siguiente secuencia en IDE,

  1. typeKeys
  2. waitForTextPresent
  3. ratón sobre
  4. haga clic en

y funcionó bien