使用Selenium(Ruby)单击DropDown菜单中的选项

时间:2013-06-26 15:56:36

标签: ruby selenium drop-down-menu html-select

我知道这个问题听起来像是重复但是我已经尝试过我在这里找到的解决方案,到目前为止没有一个对我有效。

从以下问题实施解决方案:

https://stackoverflow.com/questions/7489917/using-selenium-2-and-firefox-how-do-you-select-a-dropdown-selection Selenium WebDriver and DropDown Boxes

Ruby中方法的参考: http://selenium.googlecode.com/svn/trunk/docs/api/rb/index.html#selenium-webdriver

我正在使用硒和黄瓜来测试一个网站。我在IE 8中工作。

chan_text = @driver.find_element(:css,'select#check-list option').text
select_list = @driver.find_element(:css,'select#check-list')
dropdown = Selenium::WebDriver::Support::Select.new(select_list)
dropdown.select_by(:text, chan_text)

源代码如下:

<select id="check_list" multiple="">
<option selected="" value="81" label="MILK">MILK</option>
<option value="82" label="CHEESE">CHEESE</option>
<option value="83" label="DOUGHNUTS">DOUGHNUTS</option>
</select>

选择选项后,页面应刷新。这根本没有发生,菜单只是保持打开状态。如有任何帮助,请根据需要提供更多信息。如果真的是重复,我会删除这个问题。

2 个答案:

答案 0 :(得分:1)

如果你这样做会得到什么?

chan_text = @driver.find_element(:css,'select#check-list option').text
puts chan_text

我的赌注是,不是你想要的。

但如果你这样做 -

chan_text = @driver.find_element(:css,'select#check-list option:nth-child(2)').text
puts chan_text #"CHEESE" is what will be returned

作为find_element(for chan_text)的选择器的原因是返回所有选项值,我假设你只想要一个。因此,在您的css选择器中添加:nth-child(n)将帮助您选择您特别感兴趣的选项。

答案 1 :(得分:1)

这是我找到的更好的选择:

#Select the dropdown button 
dropdown_list = driver.find_element(:id, 'check_list')

#Get all the options from the dropdown
options = dropdown_list.find_elements(tag_name: 'option')

#Find the dropdown value by text
options.each { |option| option.click if option.text == 'CHEESE' }