16

我们正在使用 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

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 回答