elemento de selección de selenium webdriver

Tengo un control de selección en mi sitio. Estoy usando objetos de página para interactuar con la página. Si lo hago (con las primeras 2 líneas debajo de mi clase y el selectByValue en mi método)

@FindBy(id="foo")
private Select foo;

foo.selectByValue("myValue");

Falla con un puntero nulo. También probé sin el @FindBy.

Ahora, si hago esto en mi método, todo funciona bien y selecciona el elemento correcto

Select foo = new Select(sDriver.findElement(By.id("foo")));
foo.selectByValue("myValue");

Aquí está el fragmento web real para ese control (editado para proteger a los inocentes)

<select id="foo" name="service_name">
    <option selected="selected" value="one">one</option>
    <option value="two">two</option>
    <option value="three">three</option>
</select>

Permítanme decir que tengo una solución para mi problema pero No entiendo por qué el "normal"La ruta no funciona.

preguntado el 07 de marzo de 12 a las 15:03

3 Respuestas

Eso es porque el Select la clase tiene este constructor:

Select(WebElement element)

Consulte las Javadoc

Entonces, si haces algo como esto:

@FindBy(id="foo")
private WebElement wannabeSelect;
Select realSelect = new Select(wannabeSelect);
realSelect.selectByValue("myValue");

Deberia de funcionar.

Por cierto, estoy usando el mismo enfoque que usted en la "solución alternativa" porque no quiero lanzar un nuevo objeto WebElement cuando necesito Seleccionar objeto. Pero de todos modos, el

sDriver.findElement(By.id("foo"));

devoluciones WebElement, así que es por eso que está funcionando. También puedes hacer esto:

 WebElement wannabeSelect = sDriver.findElement(By.id("foo"));
 Select foo = new Select(wannabeSelect);

Respondido 19 Oct 15, 20:10

ahh, eso tiene sentido, parecía que debería haber funcionado, así que nunca cavé a fondo. Mi culpa. Gracias - ducati1212

Nota: si incluye la declaración Select y la conversión en su clase, justo debajo de la declaración privada de WebElement, obtendrá errores de tiempo de ejecución cuando se cree una instancia de la clase; para evitar esto, puede colocar la declaración y la clase Select en el método que interactúa con el control de pantalla. Una vez más, no es lo ideal, pero parece funcionar. - Vince Bowdren

con este enfoque, los objetos de página deben inicializarse después de que la página se haya cargado por completo y que el objeto esté presente y visible en el controlador. Para tenerlo proxy, echa un vistazo a mi implementación - rrw

Hay dos formas de seleccionar el valor de la opción:

Uno:

// Denotes option value - technical name
select.selectByValue(fieldValue);       

Dos:

// Denotes option text that is actually visible to be selected
select.selectByVisibleText(fieldValue);

respondido 11 mar '14, 18:03

y seleccione.selectByIndex(intValue) - dmeehan

Otra forma en que logré esto es usando el método siguiente para todos mis cuadros de selección desplegables onchange. Pase la identificación y la selección y funciona

public void onchangedropdownselection(String object, String value) {
        driver.findElement(By.id(object)).sendKeys(value);
        driver.findElement(By.id(object)).sendKeys(Keys.UP);
        driver.findElement(By.id(object)).sendKeys(Keys.DOWN);
    }

Haciendo arriba y abajo estamos inicializando el script onchange .......

Respondido 19 Feb 15, 16:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.