2

我有这样的 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。

4

3 回答 3

1

不知道为什么 shift 不起作用,但有一种非常简单的方法可以实现您想要的:

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

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

browser.select_list.clear
browser.select_list.options.each { |option| option.select }
于 2011-10-28T10:56:03.840 回答
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 项目中创建了一个功能请求,如果这是您需要的东西,您可能需要对其发表评论以了解您的需求。

于 2011-11-03T16:38:17.780 回答
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]

值得一试。

于 2011-10-28T16:33:24.080 回答