Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何通过定位css在下拉菜单中选择第一个选项?_Ruby_Selenium_Selenium Webdriver_Cucumber - Fatal编程技术网

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

Ruby 如何通过定位css在下拉菜单中选择第一个选项?,ruby,selenium,selenium-webdriver,cucumber,Ruby,Selenium,Selenium Webdriver,Cucumber,我目前正在使用Cucumber/Selenium/Ruby创建我的自动化框架并设置我的第一个测试。我正在做的一件事是填写一张表格,以便进入下一个阶段。该表单包含一个包含多个值的下拉列表,我想从中选择一个(以及任意一个!) 检查下拉菜单的元素 <input type="search" class="ember-power-select-trigger-multiple-input" autocomplete="off" autocorrect="off" autocapitalize="of

我目前正在使用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">
现在,当我运行它时,它能够找到正确的下拉选项并单击它。列表中的选项出现了,但显然什么都没有发生

我想知道的是如何进一步扩展它,以便选择下拉菜单,并选择“第一”选项?我不想指定它应该是什么,但它应该从列表中随机选择第一个并使用它

你有没有想过最简单的方法


研究片段 我做了一些研究,发现了下面这个片段,我想我可以添加到我的代码中,但是我不确定它是否真的有效,或者我是否可以将它与我上面提到的
@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
直到 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_元素(:css=>)。Select_by(:text,)
要按索引选择:

Selenium::Webdriver::Support::Select.new(@driver.find_element(:css => <insert_css_of_select_here>)).select_by(:index, <insert_index_value_here>)
Selenium::Webdriver::Support::Select.new(@driver.find_元素(:css=>)。Select_by(:index,)
按索引选择是您在此处最可能要执行的操作,将索引值设置为0以选择第一个选项

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

这就成功了。

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

find('.ember-power-select-trigger').click # Open trigger
find_all('ul.ember-power-select-options > li')[1].click # Select 2nd option
使用最新的余烬电源选择进行测试

如果您的
Capybara.default\u max\u wait\u 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

谢谢Kyle,我发现以下方法对我有效:
@wait.until{@driver.find_element(:css=>'input.ember power select trigger multiple input')。单击}
@wait.until{@driver.find_element(:css=>'.ember view>li>.ember view>li:n类型(1)>.ember view>li')。单击}
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