使用shift选择选择列表中的多个选项

时间:2011-10-28 10:40:00

标签: ruby webdriver watir watir-webdriver browser-automation

我有这样的HMTL:

<select multiple="multiple">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

我想通过点击第一个选项来选择所有选项,按住shift并单击最后一个选项:

browser.select.select "Volvo"
browser.select.send_keys :shift
browser.select.select "Audi"

但只选择了第一个和最后一个。

browser.select.selected_options
 => ["Volvo", "Audi"]

我做错了吗?

环境:Mac OS X 10.6.8,Firefox 7.0.1,ruby 1.9.2p290,selenium-webdriver 2.10.0,watir-webdriver 0.3.5。

3 个答案:

答案 0 :(得分:1)

不确定为什么班次不起作用,但有一种非常简单的方法可以达到你想要的效果:

browser.select_list.options.each { |option| option.select }

如果已选择任何列表,您可能需要先清除列表:

browser.select_list.clear
browser.select_list.options.each { |option| option.select }

答案 1 :(得分:0)

我对sendkeys不太熟悉以确定这一点,但我想它正在做的是:shift keyDown紧跟着shift keyUp,所以你没有得到在keyUp事件之前单击的时间。当然除非:shift令牌正在做一些特别的事情。就像我说的那样,我一点都不熟悉它。

发送密钥列表(不是特定的Web驱动程序)列表

Send("{a down}") ;Holds the A key down

Send("{a up}") ;Releases the A key

作为单独解雇这些事件的方式(即模拟按下的键)。

也许watir-webdriver有类似的功能?

browser.element.sendkeys [:shift down]

值得一试。

答案 2 :(得分:0)

关于Watir-Webdriver,我问Jari(Watir-webdriver背后的主要驱动力),并得到了以下答案,如果你需要这么做的话可能会给你一条追求的途径

  

watir-webdriver中还没有任何暴露(但)你应该这样做   能够使用WebDriver中的动作API(请参阅   http://rubydoc.info/gems/selenium-webdriver/2.10.0/Selenium/WebDriver/ActionBuilder)。   我不确定这是跨浏览器的支持程度如何 - 但是从   Java测试(这是最广泛的)它看起来像是目前的   仅在Firefox + Linux上支持:

     

http://code.google.com/p/selenium/source/browse/trunk/java/client/test/org/openqa/selenium/interactions/CombinedInputActionsTest.java#50

我还在Github上的Watir-Webdriver项目中创建了一个feature-request,如果这是您需要的,您可能需要对其进行评论以满足您的需求。