2013-03-12 64 views
2

我正在使用jQuery Selectable來管理日曆。這個功能很好用,它只是一個進入測試自動化的問題。測試jQuery可選水豚或硒(按Ctrl +單擊)

我需要從日曆網格中選擇多個不連續的日期。

我已經嘗試了一些事情,而不是真的希望他們的工作

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因爲只有最後的日期選擇不被認爲是關鍵實際上被選中。

+1

你確定你需要從字面上按下按鍵?硒在隱藏/只讀/禁用的元素上工作,因此您可以在日曆後面輸入數據 – 2013-03-12 15:30:58

+0

e.metaKey for mac支持 – 2013-03-12 15:31:26

+0

使用jQuery可選,用於選擇需要使用Ctrl修飾符的多個項目。我認爲硒需要按字面上按Ctrl .... – 2013-03-12 15:53:02

回答

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 
+0

似乎像builder.key_down(:控制).perform是要走的路 – 2013-08-20 18:34:11

+0

@recursive_acronym你可以標記這是接受的答案?這也幫助了我,並指出了[Selenium Action Builder]的方向(http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/WebDriver/ActionBuilder.html) – 2014-04-04 17:49:52