Capybara筆記
DSL
Capybara 搭配 Rspec 的時候可以用他定義好的DSL來使用
scenario取代itgiven, given!取代let, let!background取代beforefeature取代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
find_link
<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
click_link, click_button, click_on
找出對應的 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 真的很容易讓人搞混
這邊有一篇文章是在說,要怎麼找物件跟測試會比較好,分別有寫出不好的寫法跟好的寫法,有興趣的可以參考一下。
留言