2015-08-13 58 views
1

被禁用按鈕我有一個按鈕水豚 - 尋找位於錶行

<button type="button" id="saveListing" class="button small save-button" data-bind="enable: saveEnabled, click: save"><i class="fa fa-save"></i> Save</button> 

位於表的TR。

我寫了一個函數用於測試按鈕狀態,只需使用:

And(/^...the button "(.*?)" on "(.*?)" page is disabled$/) do |button_name, page| 

    button_id = ConfigHelper.get_button_info(button_name, page)['id'] 
    button_class = ConfigHelper.get_button_info(button_name, page)['class'] 

    if !button_id.nil? 
    find_button(button_id)[:disabled].should eq 'true' 
    elsif !button_class.nil? 
    find(button_class)[:disabled].should eq 'true' 
    else 
    button_text = ConfigHelper.get_button_info(button_name, page)['text'] 
    find('button', text: button_text)[:disabled].should eq "true" 
    end 
end 

然而,此塊不適合在錶行按鈕工作。我也嘗試通過按鈕ID添加檢查,並且它也沒有工作。我怎樣才能實現它,而無需將表ID作爲參數? (因爲我不想寫功能表裏面的id)

當使用ID,錯誤的是:

Capybara::ElementNotFound: Unable to find css ".saveListing" 

或使用文本:

Ambiguous match, found 4 elements matching css "button" (Capybara::Ambiguous) 

感謝。

+0

不以什麼方式工作?它說元素沒有找到? – ndn

+0

不,它不。我剛剛添加了錯誤消息。 – skynyrd

+0

在此代碼評估的上下文內。它是整個「頁面」嗎?你也可以嘗試在find中找到find('...',disabled:true)或者css find('...:disabled')'嗎? – ndn

回答

1

saveListing是你按鈕,不是類的ID。在CSS選擇,用於井號用於IDS

因此,您應該使用#saveListing.save-button,但不是.saveListing。這就是您的第一次匹配失敗的原因。


至於爲什麼第二個 - 我猜有4行,每個都有一個按鈕和 水豚不知道你指的是哪一個。如果要檢查這個條件 他們的所有,你可以使用 all,而不是 find這樣的:

all('button', text: button_text).each do |button| 
    button[:disabled].should eq "true" 
end 
+0

感謝您的簡單回答,實際上當我編寫「find_button('#saveListing')[:disabled] .should eq'true'」它仍然返回「無法找到按鈕」#saveListing「」。其實我對水豚很新穎,並意識到當我不給點或哈希前綴時,它指定點。 (我從配置文件中獲取按鈕信息) – skynyrd

+0

我已經將整個功能添加到問題中。 – skynyrd

+1

如果您確定它沒有在find_button('#saveListing')'整個'頁面的上下文中找到它,您是否可以嘗試'find('#saveListing')'。如果仍然沒有找到,這可能是一個等待的問題。您可以在嘗試「查找」之前通過添加「睡眠5」來嘗試測試。如果仍然收到失敗消息,請使用['save_and_open_page'或'save_and_open_screenshot'](https://github.com/jnicklas/capybara#debugging)驗證按鈕是否確實已加載,並且您位於預期的頁面上。 – ndn

1

水豚find_button不搜索CSS類在所有所以,除非你已經覆蓋find_button我不知道爲什麼你會因使用id而發生錯誤。 find_button將按按鈕的ID,值,文本內容或標題屬性進行搜索,並且還支持禁用的搜索過濾器。更穩定(如果按鈕的狀態發生變化,由於JS)這些檢查的版本將是

find_button('saveListing', disabled: true).should be #Note: no # in front of the id here since its not a css selector 
find_button('button text', disabled: true).should be 

這些會比較平穩,因爲他們將利用水豚等行爲,發現禁用的按鈕,而他們的方式如果他們還沒有被禁用,那麼之前編寫的代碼會立即發現按鈕和錯誤。