如何通过定位css在下拉菜单中选择第一个选项?

时间:2017-10-18 22:19:36

标签: ruby selenium selenium-webdriver cucumber

我目前正在使用Cucumber / Selenium / Ruby来创建我的自动化框架并设置我的第一个测试。我正在处理的那个涉及我填写表格以进入下一阶段。表单包含一个包含多个值的下拉列表,我想从中选择一个(和任何一个!)

检查下拉菜单中的元素

<input type="search" class="ember-power-select-trigger-multiple-input" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" id="ember-power-select-trigger-multiple-input-ember3325" aria-controls="ember-power-select-options-ember3325" style="width: 100%;" placeholder="All classes">

因此我在下面的步骤中使用了class

我的步骤

@wait.until {@driver.find_element(:css => 'input.ember-power-select-trigger-multiple-input').click}

目前,当我运行此功能时,它能够找到正确的下拉选项并单击它。列表中的选项出现,但显然没有任何反应。

我想知道的是我如何进一步扩展这一点以便选择下拉列表,以及&#34;第一个&#34;选项被选中?我不想指定它应该是什么,但它应该从列表中随机选择第一个并使用它。

有关实现这一目标的最简单方法的任何想法吗?

Research Snippet 我做了一些研究,发现以下片段,我认为我可以添加到我的代码中,但我不确定它是否真的有用,或者我是否可以将它与@wait.until步骤一起使用上文提到的?

groupDropdown = @driver.find_element(:css => 'input.ember-power-select-trigger-multiple-input')
option = groupDropdown.find_element(:css, "option:nth-child(1)")
option.click

3 个答案:

答案 0 :(得分:1)

@wait.until {@driver.find_element(:css => 'input.ember-power-select-trigger-multiple-input').click}
@wait.until {@driver.find_element(:css => '.ember-view > li > .ember-view > li:nth-of-type(1) > .ember-view > li').click}

这很有用。

答案 1 :(得分:0)

直到

Selenium中的“until”方法需要“truthy”响应才能继续使用其余代码。

你能做的是:

power_select = @driver.find_element(:css => 'input.ember-power-select-trigger-multiple-input')
@wait.until {power_select.displayed?}
power_select.click

这将等待元素显示在页面上,返回一个布尔值,然后点击一下

选择

继续之后,选择的方法很好地隐藏在库中,但是在搜索了一下之后:

按文字选择:

Selenium::WebDriver::Support::Select.new(@driver.find_element(:css => <insert_css_of_select_here>)).select_by(:text, <insert_option_text_here>)

按索引选择:

Selenium::Webdriver::Support::Select.new(@driver.find_element(:css => <insert_css_of_select_here>)).select_by(:index, <insert_index_value_here>)

通过索引选择您最想要做的事情,将索引值设置为0以选择第一个选项。

答案 2 :(得分:0)

这将允许您选择Capybara的ember-power-select所需选项:

find('.ember-power-select-trigger').click # Open trigger
find_all('ul.ember-power-select-options > li')[1].click # Select 2nd option

经过最新的ember-power-select测试。

如果您的Capybara.default_max_wait_time很高,您可能会发现点击速度很慢,因此可以进一步加快速度:

find('.ember-power-select-trigger').click # Open trigger
Capybara.using_wait_time(0.1) do
  find_all('ul.ember-power-select-options > li')[1].click # Select 2nd option
end