16

Selenium WebDriver と JBehave を使用して、Web アプリで「統合」テストを実行しています。フォーム入力に値を入力するメソッドがあります。

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

しかし、これを使用してドロップダウン リストの項目を選択しようとすると、(当然のことながら) 失敗します

java.lang.UnsupportedOperationException: 入力要素である要素の値のみを設定できます

コンボで値を選択するにはどうすればよいですか?

4

4 に答える 4

23

これを行う方法は次のとおりです。

@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);
}
于 2011-08-04T15:22:03.233 に答える
9

Seleniumのサポートパッケージには、必要なものがすべて含まれています。

using OpenQA.Selenium.Support.UI;

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

NuGetを介して別のパッケージとしてインポートできます:http://nuget.org/packages/Selenium.Support

于 2012-01-24T17:08:20.163 に答える
4

ext js コンボボックス typeAhead を使用して、値を UI に表示します。

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

それでもうまくいかない場合は、これも試してみる価値があります

driver.findElement(By.id("combo_id-inputEl")).sendKeys("The Value you need");
driver.findElement(By.className("x-boundlist-item")).click();
于 2014-03-14T11:22:46.533 に答える
3

Seleniumのパラダイムは、ユーザーが実際に行うことをシミュレートすることになっているというものです。つまり、クリックまたはナビゲーション用のキーのいずれかになります。

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

findElementにフィードするための動作するセレクターを取得する限り、問題はありません。私は、CSSセレクターが、複数の要素を含むものに適していることを発見しました。サンプルページはありますか?

于 2011-08-03T09:56:10.833 に答える