ducati1212
ducati1212

Reputation: 855

selenium webdriver select element

I have a select control on my site. I am using page objects to interact with the page. If I do (with the first 2 lines under my class and the selectByValue in my method)

@FindBy(id="foo")
private Select foo;

foo.selectByValue("myValue");

It fails with a null pointer. I also tried without the @FindBy.

Now if I do this in my method it all works fine and selects the correct item

Select foo = new Select(sDriver.findElement(By.id("foo")));
foo.selectByValue("myValue");

Here is the actual web snippet for that control (edited to protect the innocent)

<select id="foo" name="service_name">
    <option selected="selected" value="one">one</option>
    <option value="two">two</option>
    <option value="three">three</option>
</select>

Let me say that I have a work around for my issue but I don't get why the "normal" path is not working.

Upvotes: 11

Views: 68123

Answers (3)

Satish
Satish

Reputation: 11

Other way I achieved this is by using below method for all my onchange dropdownselection boxes. Pass id and selection and it works

public void onchangedropdownselection(String object, String value) {
        WebElement obj = driver.findElement(By.id(object));
        obj.sendKeys(value);
        obj.sendKeys(Keys.UP);
        obj.sendKeys(Keys.DOWN);
    }

By doing up and down we are initialzing the script onchange.......

Upvotes: 1

Pavel Janicek
Pavel Janicek

Reputation: 14738

Thats because the Select class has this constructor:

Select(WebElement element)

See the Javadoc

So if you do something like this:

@FindBy(id="foo")
private WebElement wannabeSelect;
Select realSelect = new Select(wannabeSelect);
realSelect.selectByValue("myValue");

It should work.

BTW, I am using the same approach as you in the "workaround" because I dont wanna cast new WebElement object when I need Select object. But anyways, the

sDriver.findElement(By.id("foo"));

returns WebElement, so thats why its working. You can also do this:

 WebElement wannabeSelect = sDriver.findElement(By.id("foo"));
 Select foo = new Select(wannabeSelect);

Upvotes: 25

Ajith Moni
Ajith Moni

Reputation: 31

There are two ways to select the option value:

One:

// Denotes option value - technical name
select.selectByValue(fieldValue);       

Two:

// Denotes option text that is actually visible to be selected
select.selectByVisibleText(fieldValue);

Upvotes: 2

Related Questions