我有这样的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。
答案 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上支持:
我还在Github上的Watir-Webdriver项目中创建了一个feature-request,如果这是您需要的,您可能需要对其进行评论以满足您的需求。