빠른 참조

Capybara Ruby 통합 테스트 치트시트

Capybara 퀵 레퍼런스: 페이지 탐색, 폼 상호작용, RSpec 매처, 요소 검색(Finders), 스코프 제한, 모달 대화상자 및 디버깅.

· 게시일

Capybara Capybara는 실제 사용자가 브라우저와 상호작용하는 방식을 시뮬레이션하여 웹 애플리케이션의 통합 테스트를 돕습니다.

페이지 탐색 및 기본 동작

visit '/login'
visit articles_path

링크 및 버튼 클릭

click_on 'Submit'           # 링크 또는 버튼 텍스트 일치
click_button 'Save Changes'
click_link 'Log Out'

폼 컨트롤 입력

fill_in 'Email', with: '[email protected]'
fill_in 'Password', with: 'secret'

choose 'Male'               # 라디오 버튼 선택
check 'Accept Terms'        # 체크박스 선택
uncheck 'Send Newsletter'

select 'California', from: 'State'
unselect 'Hawaii', from: 'State'

attach_file 'Avatar', '/path/to/image.png'

스코핑 및 컨텍스트 제한

특정 DOM 요소 또는 폼 영역으로 동작을 제한합니다:

within '.modal-dialog' do
  fill_in 'Username', with: 'admin'
  click_button 'Confirm'
end

within_fieldset 'Shipping Address' do
  fill_in 'City', with: 'San Francisco'
end

within_table 'Orders' do
  expect(page).to have_content('$99.00')
end

RSpec 매처

expect(page).to have_content('Welcome Back')
expect(page).to have_current_path('/dashboard')

# 요소 존재 여부
expect(page).to have_selector('div.alert', text: 'Success')
expect(page).to have_css('button.primary')
expect(page).to have_xpath('//table/tr')

# 폼 컨트롤 검증
expect(page).to have_field('First Name', with: 'John')
expect(page).to have_checked_field('Agree to Terms')
expect(page).to have_select('Role', selected: 'Developer')
expect(page).to have_button('Submit', disabled: false)
expect(page).to have_link('Profile', href: '/users/1')

# 부정 단언문
expect(page).to have_no_content('Error')
expect(page).not_to have_selector('.modal')

요소 검색 (Finders)

btn = find('button.submit')
btn.click

field = find_field('Email')
link  = find_link('Home')

all('li.nav-item').each do |item|
  puts item.text
end

자바스크립트 알림 및 모달

# 네이티브 알림(Alert) 수락
accept_alert do
  click_button 'Show Alert'
end

# 확인 모달(Confirm) 승인
accept_confirm do
  click_button 'Delete Account'
end

# 확인 모달(Confirm) 취소
dismiss_confirm do
  click_button 'Cancel Order'
end

테스트 디버깅

# 렌더링된 HTML 페이지를 브라우저로 열기
save_and_open_page

# 스냅샷 스크린샷 저장
save_and_open_screenshot

# 자바스크립트 코드 실행
page.execute_script("$('.dropdown').show()")
result = page.evaluate_script("window.innerWidth")

관련 주제