Selenium WebDriver выбрать элемент со списком?
Мы используем селен 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: вы можете установить только значение элементы, которые являются элементами ввода
Как выбрать значение в комбо?
Ответы
Ответ 1
Вот как это сделать:
@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);
}
Ответ 2
Пакет поддержки в 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
Ответ 3
Используя 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();
Ответ 4
Парадигма Селена заключается в том, что вы должны имитировать то, что пользователь будет делать в реальной жизни. Таким образом, это будет либо щелчок, либо клавиши для навигации.
Actions builder = new Actions( driver );
Action action = builder.click( driver.findElement( By.id( elementId ) ) ).build();
action.perform();
Пока вы получаете рабочий селектор для подачи в findElement, у вас не должно быть проблем с ним. Я нашел CSS-селекторов лучшим выбором для вещей, связанных с несколькими элементами. У вас есть образец страницы?