Selenium WebDriver, чтобы выбрать элемент комбинированного списка? - PullRequest
15 голосов
/ 03 августа 2011

Мы используем Selenium WebDriver и JBehave для запуска «интеграционных» тестов в нашем веб-приложении.У меня есть метод, который будет вводить значение в форме ввода.

@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 ]

20 голосов
/ 04 августа 2011

Вот как это сделать:

@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);
}
8 голосов
/ 24 января 2012

Пакет поддержки в 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

4 голосов
/ 14 марта 2014

Используя ext js combobox typeAhead, чтобы сделать значения видимыми в пользовательском интерфейсе.

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();
3 голосов
/ 03 августа 2011

Парадигма Selenium заключается в том, что вы должны имитировать действия пользователя в реальной жизни. Так что это будет либо щелчок, либо клавиши навигации.

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

Пока у вас есть рабочий селектор для подачи в findElement, у вас не должно быть проблем с ним. Я обнаружил, что CSS-селекторы - лучший выбор для вещей, включающих несколько элементов. У вас есть образец страницы?

...