【问题标题】:Clicking an option in DropDown menu with Selenium (Ruby)使用 Selenium (Ruby) 在下拉菜单中单击一个选项
【发布时间】:2013-06-26 15:56:36
【问题描述】:

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

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

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

我正在使用 selenium 和黄瓜来测试一个网站。我在 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>

选择选项时,页面应刷新。这根本没有发生,菜单只是保持打开状态。任何帮助表示赞赏,如果需要,请索取更多信息。如果它真的是重复的,我将删除这个问题。

【问题讨论】:

  • 需要网页url,才能看到页面源html。
  • 对不起,我无法分享网页。如果没有它就无法回答,我将删除问题并找到另一种提问方式。

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


【解决方案1】:

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

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

我敢打赌,不是你要找的。​​p>

但如果你这样做 -

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 选择器(用于 chan_text)返回所有选项值,我假设您只需要一个。因此,在您的 css 选择器中附加 :nth-child(n) 将帮助您选择您特别感兴趣的选项。

【讨论】:

  • 这不是确切的解决方案,但它确实引导了我!通过选择具有第 N 个孩子的项目,我注意到该项目未突出显示。这让我意识到啊这个项目已经被选中了!因此,我没有尝试访问特定选项,而是做了一个 send_keys :return ,它起作用了。我意识到无法看到源头使得人们很难提供帮助。我想我会删除这个问题,因为我的很多问题都不知道,所以无法具体找到解决方案。
  • 其实我想我会把这个标记为答案。如果这正是我的问题,那么您的解决方案就会奏效。
  • 实际上,在确定将返回所有选项值时,答案是不正确的。他正在使用find_element(不是find_elements),它只会返回一个元素,即找到的第一个元素。我的猜测是,就像他指出的那样,当他从选项元素中获取文本时,焦点被赋予了选择控件,但更新页面的事件侦听器从未被触发。我会鼓励@megaxelize 与开发人员一起确定正在侦听的确切事件,然后适当地触发它。
  • @bgoad,答案没有错。根据 Megaxelize 的问题,是否提供了这个答案。如果她想收集所有可用选项,然后从获得的列表/数组中选择一个特定选项,那么使用find_elements 将有助于做到这一点。然后遍历该元素列表/数组可以找到每个元素的文本并存储在另一个数组中。另一种解决方案是编写 javascript 以在一行/步骤中完成所有这些操作。
  • @bgoad,我的回答提供了一种选择 A 选项而不是 ALL 选项的方法。
【解决方案2】:

这是我发现的一个更好的选择:

#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' }

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2015-07-27
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2020-05-26
    • 2015-08-22
    • 1970-01-01
    相关资源
    最近更新 更多