Selenium WebDriver to select combo-box item?

99封情书 提交于 2019-12-18 12:55:28

问题


We are using Selenium WebDriver and JBehave to run "integration" tests on our web-app. I have a method that will enter a value into a form input.

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

But when I try to use this to select an item in a drop-down list it (unsurprisingly) fails

java.lang.UnsupportedOperationException: You may only set the value of elements that are input elements

How do I select a value in the combo?


回答1:


This is how to do it:

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


The Support package in Selenium contains all you need:

using OpenQA.Selenium.Support.UI;

SelectElement select = new SelectElement(driver.findElement( By.id( elementId ) ));
select.SelectByText("Option3");
select.Submit();

You can import it through NuGet as a separate package: http://nuget.org/packages/Selenium.Support




回答3:


By using ext js combobox typeAhead to make the values visible in 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);

If that doesn´t work this is also worth a try

driver.findElement(By.id("combo_id-inputEl")).sendKeys("The Value you need");
driver.findElement(By.className("x-boundlist-item")).click();



回答4:


The Selenium paradigm is that you are supposed to simulate what a user would do in real life. So that would be either a click or a keys for navigation.

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

As long as you get a working selector to feed into findElement you should have no problem with it. I have found CSS selectors to be a better bet for things involving multiple elements. Do you have a sample page?



来源:https://stackoverflow.com/questions/6924550/selenium-webdriver-to-select-combo-box-item

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!