web-dev-qa-db-ja.com

セレンwebdriver選択要素

私のサイトには選択コントロールがあります。ページを操作するためにページオブジェクトを使用しています。もしそうなら(私のクラスの下の最初の2行と私のメソッドのselectByValueで)

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

foo.selectByValue("myValue");

Nullポインタで失敗します。私も@FindByなしで試しました。

私の方法でこれを行うと、すべて正常に動作し、正しいアイテムを選択します

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

これがそのコントロールの実際のWebスニペットです(無実を保護するために編集されています)。

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

私の問題に回避策があるとしましょうbutnormal」パスがなぜなのかわかりません機能していません。

11
ducati1212

これは、Selectクラスに次のコンストラクタがあるためです。

Select(WebElement element)

Javadoc を参照してください

したがって、次のようなことをすると:

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

うまくいくはずです。

ところで、私は「回避策」であなたと同じアプローチを使用しています。選択オブジェクトが必要なときに新しいWebElementオブジェクトをキャストしたくないからです。しかしとにかく、

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

WebElementを返すので、そのように機能します。これを行うこともできます:

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

オプション値を選択する方法は2つあります。

1:

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

二:

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

私がこれを達成した別の方法は、すべてのonchangeドロップダウン選択ボックスに以下のメソッドを使用することです。 IDと選択を渡すと機能します

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

上下に移動することで、スクリプトonchangeを初期化しています。

1
Satish