wake-up-neo.com

selen Webdriver select Element

Ich habe ein Auswahlsteuerelement auf meiner Website. Ich verwende Seitenobjekte, um mit der Seite zu interagieren. Wenn ja (mit den ersten 2 Zeilen unter meiner Klasse und der selectByValue in meiner Methode)

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

foo.selectByValue("myValue");

Es schlägt mit einem Nullzeiger fehl. Ich habe es auch ohne @FindBy versucht.

Wenn ich das jetzt in meiner Methode mache, funktioniert alles gut und wählt das richtige Element aus

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

Hier ist das eigentliche Web-Snippet für dieses Steuerelement (bearbeitet zum Schutz der Unschuldigen)

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

Lassen Sie mich sagen, dass ich eine Problemumgehung habe aber Ich verstehe nicht, warum der " normal " - Pfad nicht funktioniert. 

9
ducati1212

Das liegt daran, dass die Select-Klasse diesen Konstruktor hat:

Select(WebElement element)

Siehe die Javadoc

Also wenn du so etwas machst:

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

Es sollte funktionieren. 

Übrigens, ich verwende den gleichen Ansatz wie Sie in der "Problemumgehung", da ich kein neues WebElement-Objekt umsetzen möchte, wenn ich ein Select-Objekt brauche. Aber auf jeden Fall die

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

gibt WebElement zurück, weshalb es funktioniert. Sie können dies auch tun:

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

Es gibt zwei Möglichkeiten, den Optionswert auszuwählen:

Ein:

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

Zwei:

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

Ein anderer Weg, den ich erreicht habe, ist die untenstehende Methode für alle meine Dropdown-Auswahlfelder. ID und Auswahl übergeben und es funktioniert

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);
    }

Durch Auf und Ab initialisieren wir das Skript onchange .......

1
Satish