2011-08-03 45 views
14

Estamos utilizando Selenium WebDriver y JBehave para ejecutar pruebas de "integración" en nuestra aplicación web. Tengo un método que ingresará un valor en una entrada de formulario.Selenium WebDriver para seleccionar el elemento del cuadro combinado?

@When("I enter $elementId value $value") 
public void enterElementText(final String elementId, final String value) { 
    final WebElement webElement = webdriver.findElement(By.id(elementId)); 
    webElement.clear(); 
    webElement.sendKeys(value); 
} 

Pero cuando trato de usar esto para seleccionar un elemento de una lista desplegable que (como era de esperar) no

java.lang.UnsupportedOperationException: Sólo puede establecer el valor de los elementos que son elementos de entrada

¿Cómo selecciono un valor en el combo?

+0

posible duplicado de [+ WebDriver HtmlUnitDriver + Java + Desplegar] (http://stackoverflow.com/ preguntas/5805585/webdriver-htmlunitdriver-java-desplegable) –

Respuesta

17

Ésta es la forma de hacerlo:

@When("I select $elementId value $value") 
public void selectComboValue(final String elementId, final String value) { 
    final Select selectBox = new Select(web.findElement(By.id(elementId))); 
    selectBox.selectByValue(value); 
} 
2

El paradigma de Selenium es que se supone que debes simular lo que un usuario haría en la vida real. Entonces eso sería un clic o una tecla para navegar.

Actions builder = new Actions(driver); 
Action action = builder.click(driver.findElement(By.id(elementId))).build(); 
action.perform(); 

Siempre y cuando obtenga un selector de trabajo para alimentar en findElement no debería tener ningún problema con él. He encontrado que los selectores de CSS son una mejor opción para las cosas que involucran múltiples elementos. ¿Tienes una página de muestra?

+0

No funciona para mí, no puedo encontrar la clase Acciones. Por cierto, usar selenio 2.x. Pero vea otra pregunta SO que he marcado como duplicado. –

+0

Descargue la última versión. Creo que solía llamarse ActionBuilder o algo –

7

el módulo de apoyo en selenio contiene todo lo que necesita:

using OpenQA.Selenium.Support.UI; 

SelectElement select = new SelectElement(driver.findElement(By.id(elementId))); 
select.SelectByText("Option3"); 
select.Submit(); 

se puede importar a través NuGet como un paquete separado: http://nuget.org/packages/Selenium.Support

4

Al usar el cuadro combinado ext js escribaAhead para hacer que los valores sean visibles en la interfaz de usuario.

var theCombo = new Ext.form.ComboBox({ 
... 
id: combo_id, 
typeAhead: true, 
... 
}); 

driver.findElement(By.id("combo_id-inputEl")).clear(); 
driver.findElement(By.id("combo_id-inputEl")).sendKeys("The Value you need"); 
driver.findElement(By.id("combo_id-inputEl")).sendKeys(Keys.ARROW_DOWN); 
driver.findElement(By.id("combo_id-inputEl")).sendKeys(Keys.ENTER); 

Si ese trabajo Indiferente esto también vale la pena intentarlo

driver.findElement(By.id("combo_id-inputEl")).sendKeys("The Value you need"); 
driver.findElement(By.className("x-boundlist-item")).click(); 
+0

También funciona en Java: dado un poco de 'Plantilla de plantilla WebElement', puedes hacer 'templateInput.sendKeys (STANDARD_TEXT + Keys.ARROW_DOWN + Keys.ENTER);' – barclay

Cuestiones relacionadas