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