jquery-ui
  • cucumber
  • capybara
  • 2010-11-11 176 views 1 likes 
    1

    我的頁面上輸入字段#graph_start_dateXPath的選擇

    我想寫以下步驟黃瓜一個jQuery UI的日期選擇器

    When I click the graph start date 
    Then I should see a datepicker 
    

    下面是我對步驟定義:

    When /I click the graph start date/ do 
        find(".//*[@id='graph_start_date']").click 
    end 
    
    Then /^I should see a datepicker$/ do 
        page.should have_xpath(".//div[@id='ui-datepicker-div' and ?????????]") 
    end 
    

    的jQuery UI的日期選擇器最初插入到DOM

    <div class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible" id="ui-datepicker-div"></div> 
    

    當它彈出的DOM包含

    <div class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible" id="ui-datepicker-div" style="position: absolute; top: 523px; left: 167.5px; z-index: 1;"> 
    

    其駁回DOM包含

    <div class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible" id="ui-datepicker-div" style="position: absolute; top: 523px; left: 167.5px; z-index: 1; display: none;"> 
    
    +2

    毫無疑問問。 ??? – 2010-11-11 20:39:02

    +0

    我試過page.should have_xpath(「// div [@ id ='ui-datepicker-div'幷包含(@ style,'display:block')]」),但page.body甚至不包含js生成的代碼,所以我如何寫斷言? – linojon 2010-11-11 21:10:09

    +0

    實際上這也失敗了(將表明選擇器是或彈出過)page.should have_xpath(「// div [contains(@ style,'position:absolute')]」) 所以也許點擊沒有真正的工作?但是當我在調試器中暫停時,我可以在Webdriver Firefox窗口中看到日期選擇器。 – linojon 2010-11-11 21:24:54

    回答

    3

    有它在Capybara::Node::Matchers#has_xpath?這樣記錄的:visible => true選項:

    Then /^I should see a datepicker$/ do 
        page.should have_xpath(".//div[@id='ui-datepicker-div']", :visible => true) 
    end 
    

    然而,這可能是一個不同的問題,但對我來說,當水豚驅動器沒有焦點的日期選擇器不會出現在所有,所以我的測試失敗(有時)

    編輯:

    首先,它似乎日期選擇器實際上並不希望在球場上點擊觸發,但重點不幸的是水豚的硒驅動程序不支持的,並沒有當你觸發觸發點擊但瀏覽器沒有焦點。

    觸發焦點的正確的方法是:

    find(".//div[@id='ui-datepicker-div']").trigger('focus') 
    

    這又引出一個Capybara::NotSupportedByDriverError :(

    要解決,你可以使用的hackish

    When /I focus the graph start date/ do 
        page.execute_script("$('#graph_start_date').focus()") 
    end 
    

    (感謝:http://groups.google.com/group/ruby-capybara/msg/af6caeef01d978b0

    有各種各樣的討論和相關的問題,對這個在谷歌網上論壇:

    0

    我會運行一些JavaScript這#focuses現場後,點擊錨1 ..然後讓水豚確保正確的價值在田間。

    0

    今天早上我遇到了同樣的問題,這裏是我如何修復它。

    在我的特徵文件

    @javascript # You need this javascript tag 
    Scenario:Adding a date to a job 
        When I go to enter a date 
        Then I should see a date picker appear 
    

    在我的步驟定義:

    When /^ I go to enter a date$/ do 
        element = find_by_id("you_date_field_id") 
        element.click 
    end 
    
    The /^I should see a date picker appear$/ do 
        date = find(:xpath, "//div[@id='ui-datepicker-div']") 
    end 
    

    希望這有助於

    相關問題