Capybara: tiene_contenido? y nuevas lineas

Creado en 10 mar. 2010  ·  9Comentarios  ·  Fuente: teamcapybara/capybara

Por cierto, http://github.com/keithpitt en realidad publicó esto, pero olvidé cerrar sesión en la cuenta de trabajo mientras escribía esto: D

Tome el siguiente html:

<div>
<strong>Keith</strong>
 is writing a bug report
</div>

La siguiente prueba de pepino falla.

And I should see "Keith is writing a bug report"

Lo he clavado en la nueva línea "n". Las pruebas originales de pepino webrat resuelven este problema haciendo algo como esto:

html.inner_text.gsub(/\s+/, ' ').include?("Keith is writing a bug report"")

¿Dónde están los pasos de pepino carpincho que usan XPath, que por lo que puedo ver, se equivocan cuando hay una nueva línea?

Lo he resuelto haciendo esto:

module Capybara
  class Session

    # The Capybara definition of has_content uses XPath, which works for
    # the most part, but it falls over when the content you are testing
    # has a line break in it. Here I'm reimplementing the has_content?
    # methods to go directly to the browser text, and I'm also stripping
    # out new lines.
    def has_content?(content)
      if driver.kind_of?(Capybara::Driver::Culerity)
        driver.browser.text.gsub(/\s+/, ' ').include?(content)
      else
        driver.html.inner_text.gsub(/\s+/, ' ').include?(content)
      end
    end

    def has_no_content?(content)
      !has_content?(content)
    end

  end
end

No es una gran solución, pero está arreglada para mi versión local.

Todos 9 comentarios

Reconozco que esto es un problema, pero no creo que su solución sea la solución alternativa correcta. Con la implementación actual de los ámbitos, esto es un poco complicado. La implementación actual tiene debilidades de todos modos, y podría solucionarlo en algún momento, pero por el momento, soy reacio a cambiar algo aquí. Cierro este tema por ahora. Si puede proporcionar un buen parche, vuelva a abrir el ticket y consideraré fusionarlo.

Oh, cierra. Sé que mi solución fue mala. Tenía la esperanza de abrir una discusión para otras soluciones alternativas porque la mayoría de mis pruebas están fallando. Quiero mudarme a Carpincho, pero este error es un factor decisivo para mí.

Estoy feliz de enviar otro parche correcto, pero antes de hacerlo, necesito que me guíe en la dirección correcta.

De hecho, eché un vistazo a la especificación XPath y encontré la hermosa joya que es la función de normalización del espacio. ¡Resulta que esto fue bastante fácil de implementar!

¿Cuota? ;)

Esperaba que GitHub agregara el enlace por mí, pero parece que no lo hace si el problema ya está cerrado. Aquí tienes: http://github.com/jnicklas/capybara/commit/dbe7d8ad2251049088f0a4e24398abb7c8584b19

¡Hurra! Saludos por investigar eso.

@jnicklas esta solución es excelente, ¡pero a mí no me funciona!

 And I should see "FOOBAR ver perfil 30,00 €"                     # features/step_definitions/web_steps.rb:238
      expected to find text "FOOBAR ver perfil 30,00 €" in "Salir  \nBuscar:\nImporte de la puja Fecha (hora de España)\nFOOBAR ver perfil\n30,00 €\nviernes, 11/05/18"
bundle list capybara
/home/davidm/.rvm/gems/ruby-2.2.2@project/gems/capybara-3.1.0

@linuxonrails Este problema es de hace 7 años; pregunte cómo escribir preguntas en la lista de correo según lo solicitado en el LÉAME o en stackoverflow

¿Fue útil esta página
0 / 5 - 0 calificaciones