2011-09-07 33 views
15

Me pregunto si watir-webdriver es la capacidad de registrar la salida de cualquier error de la consola. Esto sería equivalente a abrir manualmente la consola en un navegador y observar los errores de JS a medida que se carga la página. ¿Puedo capturar esto a través de watir-webdriver y log/error encendido?¿Puede watir-webdriver capturar errores de consola?

Respuesta

1

Al utilizar watir-webdriver en combinación con Cucumber, los errores, si los hay, se envían a un archivo html que está muy bien formateado e incluye los errores de watir-webdriver.

Esto se puede lograr mediante la adición de las siguientes banderas a su perfil predeterminado en cucumber.yml:

--color --format pretty --format html -o results.html Más información sobre este archivo here. He aquí algunos background on Cucumber.

Sin embargo, si usted está usando solamente Watir-WebDriver desde la consola, puede redirigir los errores Watir-WebDriver a un archivo de la siguiente manera:

$ ruby your_watir_script.rb 2> watir_debug.log #watir outputs errors as stderr

En la mayoría de los casos, si algo en watir falla (p. ej., no se puede encontrar un elemento) y luego todo lo demás también fallará, por lo que es útil tener algo como Cucumber para impulsar tu automatización según el escenario.

+2

Así que estos Los errores son los errores que el propio watir arroja correctamente? ¿Watir ya captura los errores Javascript de la página y los registra? – negativebase

2

Si va a ser útil a alguien - esta solución debería funcionar:

def check_console_log 
    console_log = @browser.driver.manage.logs.get(:browser) 
    if console_log != nil 
     raise(console_log) 
    end 
end 
+0

¿Estás seguro de que es así? No veo 'get_log' en la documentación? –

+0

Algo seguro. Por ahora estoy usando esta funcionalidad en mi proyecto, después del paso fallido estoy verificando el registro de la consola y escribiendo el archivo de registro. Este método se describe en _module Selenium_ _module WebDriver_ _module Remote_ 'def getlog (tipo) datos = ejecutar: getlog, {},: type => tipo.to_s Matriz (datos) .map do | l | LogEntry.new l.fetch ('nivel'), l.fetch ('timestamp'), l.fetch ('mensaje') end end' – Kirikami

1

basé mi solución en Kirikami's answer, sin pepino necesario. Este enfoque solo imprime la consola de JavaScript Errors (sin advertencias, información, registros o depuración).

def print_js_errors 
    log = @browser.driver.manage.logs.get(:browser) 
    errors = log.select{ |entry| entry.level.eql? 'SEVERE' } 
    if errors.count > 0 
    javascript_errors = errors.map(&:message).join("\n") 
    raise javascript_errors 
    end 
end 

Entonces, si usted está utilizando rspec, usted puede hacer esto:

RSpec.configure do |config| 
    config.after :each do 
    print_js_errors 
    end 
end 

Pros:

  1. Seguirá disfrutando de la salida normal de RSpec para las pruebas que Pass
  2. Usted todavía recibe los mensajes de error lanzados por watir-webdriver para las pruebas que Fail (por ejemplo, tiempo de espera, elemento no encontrado, etc.)
  3. Cuando se emite un error de Javascript, que se agrega a la salida de los resultados de pruebas RSpec

Contras:

  1. Las primeras dos líneas de print_js_errors se ejecutan después de cada prueba
Cuestiones relacionadas