Skip to content

Instantly share code, notes, and snippets.

@alanrrb
Last active July 21, 2021 19:29
Show Gist options
  • Save alanrrb/588625ae107c584d4a24e3c82c288d00 to your computer and use it in GitHub Desktop.
Save alanrrb/588625ae107c584d4a24e3c82c288d00 to your computer and use it in GitHub Desktop.
Dicas Capybara + Rspec

Dicas Capybara + Rspec

Navegando

visit('/path')
visit(models_path)
visit(model_path(model))
visit '/path'
visit models_path
visit model_pathmodel

Ações

Clicando em links e botões

click_link 'id-do-link'
click_link 'Texto do link'
click_button 'Criar Vaga'
click_on 'Texto do Botão'
click_on 'id-do-elemento'

Formulários

Texto

fill_in('Endereço', with: 'Rua da Ladeira, 54') # encontra o elemento por label
fill_in 'Password', with: '543543fadsfa#@'
fill_in 'Descrição', with: 'Texto super longo.......'
fill_in 'user[name]', with: 'Maria' # encontra por name do elemento
fill_in 'user_name', with: 'John' # encontra o elemnto por id

Select

select('Option',   from: 'Select Box')
select 'Matérias', from: 'Matemática' # use mais de uma vez o mesmo label
select 'Matérias', from: 'Geografia'  # para multiplas escolhas
select 'Matérias', from: 'Filosofia'
# funciona também por id e name
select 'user[classroom]', from: 'Auditório'

Checkbox

check('A Checkbox')
uncheck('A Checkbox')
check 'id-do-checkbox'
uncheck 'name[checkbox]'

Radio button

choose('A Radio Button')

Arquivos

attach_file('Image', '/caminho/para/imagem.jpg')

Verificando elementos

Todos esses métodos retornam um boolean

# por css
page.has_selector?('table tr')
page.has_css?('table tr.foo')

# por xpath
page.has_selector?(:xpath, '//table/tr')
page.has_xpath?('//table/tr')

# encontrando conteúdo
page.has_content?('foo')

Expectativas com Rspec

As forma de consulta acima pode ser usadas com o Rspec, ex:

expect(page).to have_content('Texto da página')
expect(page).to have_css('h1', text: 'Super titulo')
xpect(page).to have_css('h3', count: 3) # 3 elementos h3
expect(page).to have_selector('table tr.row') # elemento tr com css 'row' em uma table

# outras expectativas
expect(current_path).to eq models_path
expect(page).to have_current_path(post_comments_path(post))

expect(find('elemento')).to have_content 'Texto' # espera encontrar um texto dentro de um elemento específico
expect(find('#id-css')).to have_content 'Texto'

Debugging

# salva um html da pagina e abre no browser. (para abrir precisa da gem launchy)
save_and_open_page

Definindo escopo

# preenche o campo com label Busca dentro de um form com id 'id-form1'
within('form#id-form1') do
  fill_in 'Busca', with: 'Valor'
end

Escrevendo Spec

Feature

Crie uma feature por arquivo, esses arquivos devem ser criado na pasta spec/features e deve ter o nome da features com o sufixo _spec. Ex: spec/features/user_visits_home_page_spec.rb

feature 'Mensagem' do
end

Scenario

Um ou mais por feature

feature 'Mensagem' do
  scenario 'mensagem do scenario' do
  end
end

Exemplo:

feature 'User visits home page' do
  scenario 'successfully' do
   ...
  end
  scenario 'do login' do
   ...
  end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment