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:入力要素である要素の値のみを設定できます
コンボで値を選択するにはどうすればよいですか?
これを行う方法は次のとおりです。
@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);
}
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
Ext js combobox 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();
セレンのパラダイムは、ユーザーが実際の生活で何をするかをシミュレートすることになっています。つまり、クリックまたはナビゲーションのキーのいずれかになります。
Actions builder = new Actions( driver );
Action action = builder.click( driver.findElement( By.id( elementId ) ) ).build();
action.perform();
FindElementにフィードするためのセレクターが機能している限り、問題はありません。私は、CSSセレクターが複数の要素を含むものに適していることを発見しました。サンプルページはありますか?