ruby-on-rails - example - gem capybara rails



Combinador de capibara para presencia de botón o enlace. (4)

Creo que puedes usar el método de instancia de encontrar botón:

(Capybara::Element) find_button(locator)

Utilizando id, nombre, valor.

O si quieres un enlace

(Capybara::Element) find_link(locator)

De: http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Finders#find_button-instance_method

https://src-bin.com

Los usuarios en la página web no distinguen entre "botón" y "enlace con el estilo de botón". ¿Hay alguna forma de agregar verificación si hay un "botón o enlace" en la página?

Por ejemplo Capibara tiene paso:

page.should have_button('Click me')

que no encuentra enlaces con el estilo de botones.


Answer #1

Personalmente, le daría a su botón o enlace una identificación y buscaría eso usando

page.should have_css('#foo')

De esta manera puede consultar el enlace o el botón sin preocuparse por su implementación.

Siempre me parece útil: https://gist.github.com/428105


Answer #2

Tuve un caso extraño en el que algunas pruebas de humo desfilaron en varias páginas de inicio de sesión centradas en el cliente que tenían ligeras variaciones al hacer el botón de envío de inicio de sesión ... Impulsado por una tabla de pepinos de usuarios, org, etc.

# A bit of a hack, org_name is normally a subdomain, but sometimes it is the complete domain
def login(user, org_name)
  # Use the below to automatically hit each user's org's server
  if org_name.include? '.com'
    Capybara.app_host = "http://#{org_name}"
  else
    Capybara.app_host = "http://#{org_name}.mydomain.com"
  end

  visit '/'
  fill_in 'username', :with => user
  fill_in 'userpwd', :with => '***'
  begin
    page.find(:link_or_button, 'submit')
    click_on 'submit'
  rescue Capybara::ElementNotFound
    page.find(:link_or_button, 'Log In')
    click_on 'Log In'
    rescue Capybara::ElementNotFound
      pending "Need to determine how to invoke the Login button for #{org_name} near Line ##{__LINE__} of #{__method__} in #{__FILE__} "
  end

  # -----------------------
  # Work-around for modal popup saying SSL is mismatched if you are using actual production URLs
  # The rescue is for cases that do not exhibit the modal pop-up
  page.driver.browser.switch_to.alert.accept rescue Selenium::WebDriver::Error::NoAlertPresentError

  # Ensure that login was successful
  page.should_not have_content 'Login failed'
end

Answer #3

Usando la sintaxis de expectativa

expect(page).to have_selector(:link_or_button, 'Click me')

Esto funciona sin necesidad de definir un emparejador personalizado.





capybara