2

我正在使用 jQuery Selectable 来管理日历。这个功能很好用,它只是进入测试自动化的问题。

我需要从日历网格中选择多个不连续的日期。

我已经尝试了一些东西,并没有真正期望它们能够工作

date = '2013-05-02'
page.execute_script %{
    var e = jQuery.Event("keydown");
    e.ctrlKey = true; // # Some key code value
    e.keyCode = 17
    $("body").trigger(e);
}
find("td[data-date='#{date}']").click

我为一系列日期执行此操作,但似乎没有考虑 ctrl 键,因为实际上只有最后一个选择的日期被选中。

4

1 回答 1

3

您可以使用 selenium-webdriver 的操作构建器。但是,firefoxdriver 中似乎存在一个错误,导致目前无法正常工作(可能是issue 4863)。

这是使用 Chrome 的 JQuery 可选页面的工作示例:

require 'capybara'
require 'capybara/dsl'
include Capybara::DSL

#Use selenium-webdriver with chrome
Capybara.register_driver :selenium do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
Capybara.current_driver = :selenium

#Go to the JQuery Selectable example page
Capybara.app_host = 'http://jqueryui.com/selectable/'
page.visit('')

#The controls are in a frame, so need to switch to it
within_frame 0 do
    #Create a selenium-webdriver action builder
    builder = page.driver.browser.action

    #Hold control key down
    builder.key_down(:control)

    #Click all elements that you want, in this case we click all lis
    #Note that you can retrieve the elements using capybara's
    #  standard methods. When passing them to the builder
    #  make sure to do .native
    elements = page.all('ol#selectable li')
    elements.each do |e|        
        builder.click(e.native)
    end

    #Release control key
    builder.key_up(:control)

    #Do the action setup
    builder.perform
end
于 2013-03-12T16:23:34.497 回答