Question

I am trying to use capybara (ruby bindings) to select an item from a dropdown that does not have an id or unique class, but I seem to be unable to do so.

The select box in question looks like this:

<select data-bind="options: environments, optionsText: 'name', value: selectedEnvironment,   optionsCaption: 'Choose...'" class="form-control">

Trying to do a:

select("option",:from "#panel > div.panel-body > form > div:nth-child(1) > select")

does not work, but I am able to find the select field using a

page.find("#panel > div.panel-body > form > div:nth-child(1) > select")

The documentation says that the select method expects an id, name or label of the select box, but surely there must be a way of selecting something from a dropdown that is more specific than this. Is there another method I can use other than select() or do I have to go back to using pure selenium?

Was it helpful?

Solution

If you want more control over which option you select, you will need to:

  1. Find the option element (using find, all, etc)
  2. Use the select_option method

For example, if you wanted to just select the first option:

option = page.first("#panel > div.panel-body > form > div:nth-child(1) > select option")
option.select_option

Or if you wanted to select the last:

options = page.all("#panel > div.panel-body > form > div:nth-child(1) > select option")
options[-1].select_option
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top