مرجع سريع

ورقة مساعدة لاختبارات التكامل في Ruby عبر Capybara

مرجع سريع لـ Capybara: التنقل بين الصفحات، تعبئة النماذج، محددات RSpec، البحث في العناصر، النطاقات والحوارات وتصحيح الأخطاء.

· تاريخ النشر

Capybara يساعدك Capybara على اختبار تطبيقات الويب من خلال محاكاة تفاعل المستخدم الحقيقي في مواصفات التكامل.

التنقل والإجراءات (Navigation)

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'               # زر اختيار أحادي (Radio button)
check 'Accept Terms'        # مربع اختيار (Checkbox)
uncheck 'Send Newsletter'

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

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

تحديد النطاق والسياق (Scoping)

حصر الإجراءات داخل عقدة 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

تنبيهات ومربعات حوار JavaScript

# قبول تنبيه المتصفح الأصلي
accept_alert do
  click_button 'Show Alert'
end

# قبول نافذة التأكيد
accept_confirm do
  click_button 'Delete Account'
end

# إلغاء نافذة التأكيد
dismiss_confirm do
  click_button 'Cancel Order'
end

تصحيح الأخطاء (Debugging)

# فتح صفحة HTML المخرجة في المتصفح
save_and_open_page

# حفظ لقطة شاشة للصفحة
save_and_open_screenshot

# تنفيذ كود JavaScript
page.execute_script("$('.dropdown').show()")
result = page.evaluate_script("window.innerWidth")

موضوعات ذات صلة