【问题标题】:Selenium WebDriver to select combo-box item?Selenium WebDriver 选择组合框项目?
【发布时间】:2011-08-03 09:48:23
【问题描述】:

我们正在使用 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: 你只能设置 作为输入元素的元素

如何在组合中选择一个值?

【问题讨论】:

标签: java selenium-webdriver jbehave


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是怎么做的:

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

    【讨论】:

      【解决方案3】:

      Selenium 范例是您应该模拟用户在现实生活中会做的事情。因此,这将是单击或导航键。

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

      只要你有一个可以工作的选择器来输入 findElement,你应该没有问题。我发现 CSS 选择器对于涉及多个元素的事情是一个更好的选择。您有示例页面吗?

      【讨论】:

      • 对我不起作用,我找不到 Actions 类。顺便说一句,使用硒 2.x。但是请参阅我标记为重复的其他 SO 问题。
      • 下载最新版本。我觉得以前叫ActionBuilder什么的
      【解决方案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();
      

      【讨论】:

      • 也适用于 Java:给定一些 WebElement templateInput,您可以使用 templateInput.sendKeys(STANDARD_TEXT + Keys.ARROW_DOWN + Keys.ENTER);
      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多