Capybara筆記

少於 1 分鐘閱讀

DSL

Capybara 搭配 Rspec 的時候可以用他定義好的DSL來使用

  • scenario 取代 it
  • given, given! 取代 let, let!
  • background 取代 before
  • feature 取代 describe ..., :type => :feature

Navigating

visit

visit - 要 access 的網址, 為 GET

visit 'https://www.google.com'

page

page - 該頁 html

URL test

測試該頁是否為指定的網址

expect(page).to have_current_page('/products')


Clicking links and buttons

<a id="myLink" class="link">SUBMIT</a>
find_link
find_link('myLink')
find_link('SUBMIT')
find_link(class:'link')

都會找到同一個 a , 但要注意的的是 find_link 只能找唯一的物件,也就是說整張 html 只能有這一個物件,如果有其他重複的話就會噴錯 Capybara::Ambiguous: Ambiguous match, found 2 elements matching link nil

find_button

跟 find_link 一樣,只不過他是找 buttons

找出對應的 link or button 並且 click

click_on 跟 click_link, click_button的差別是 只要是 link or button 都會找

Interacting with forms

selcet

<label for='mySelect'>City</label>
<selcet id='mySelcet'>
  <option value='NY'>New York</option>
  <option value='HI'>Hawaii</option>
  <option></option>
</seclet>
# 會是一樣的結果
select('Hawaii', from: 'City')
select('Hawaii', from: 'mySelcet')

要選擇 Hawaii 的話可以用 selcet, 第一個參數是 option 的 text (注意不是 value), 第二個參數是 selcet element 的 id or name 或是 label 的 text.

.has_css? 地雷

.has_css? 是用來搜尋某個 element 裡的 child 有沒有指定的 css, 並不是指該 element 有沒有指定的 css. 但這個 method name 真的很容易讓人搞混

這邊有一篇文章是在說,要怎麼找物件跟測試會比較好,分別有寫出不好的寫法跟好的寫法,有興趣的可以參考一下。

Capybaraを使って、Rails+JavaScriptの非同期な統合テストを書く

更新時間:

留言