Cucumber: expresando comportamiento en texto plano

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    3 Favorites

    Cucumber: expresando comportamiento en texto plano - Presentation Transcript

    1. Cucumber: Expresando Comportamiento en Texto Plano Raimond Garcia Gimenez Fernando Garcia Samblas
    2. Antecedentes 2002: Ward Cunningham's Framework for Integrated Test Especificaciones ejecutables desde Word, Excel, Wikis, etc. Febrero 2007: Dan North's RSpec Stories Stories escritas en Ruby y http://dannorth.net/whats-in-a-story Octubre 2007: David Chelimsky: plain text support Escritas en inglés y separadas del código Agosto 2008: Aslak Hellesøy's Cucumber Internacionalización y mucho más...
    3. given/when/then Feature: <funcionalidad> In order to <beneficio/valor/why?> As a <rol> I want to <feature> Scenario: <escenario> Given <contexto> [And <contexto>] When <evento> [And <evento>] Then <resultado> [And <contexto>] [But <contexto>]
    4. given/when/then Feature: <funcionalidad> In order to <beneficio/valor/why?> As a <rol> I want to <feature> Scenario: <escenario> Given <contexto> [And <contexto>] When <evento> [And <evento>] Then <resultado> [And <contexto>] [But <contexto>] Ejemplo en breve... With GivenScenario!
    5. Limitaciones de RSpec Stories
    6. Limitaciones de RSpec Stories Niñoooooooossss..... a comer!!!!!!
    7. Resumiendo... Entorno Crudo •Sin herramienta para lanzar stories/scenarios •Sin soporte rake •Sin convenciones •Forzosamente escritas en ingles •Feedback limitado •Hooks preparacion/finalizacion artesanales
    8. Cucumber
    9. Script • script/cucumber
    10. Script • script/cucumber • cucumber (default profile en cucumber.yml)
    11. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features
    12. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features • cucumber features/admin*
    13. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features • cucumber features/admin* • cucumber features/hola.feature
    14. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features • cucumber features/admin* • cucumber features/hola.feature • cucumber features/hola.feature --line 10
    15. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features • cucumber features/admin* • cucumber features/hola.feature • cucumber features/hola.feature --line 10 • cucumber --profile html_report
    16. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features • cucumber features/admin* • cucumber features/hola.feature • cucumber features/hola.feature --line 10 • cucumber --profile html_report --require
    17. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features • cucumber features/admin* • cucumber features/hola.feature • cucumber features/hola.feature --line 10 • cucumber --profile html_report --format --require
    18. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features • cucumber features/admin* • cucumber features/hola.feature • cucumber features/hola.feature --line 10 • cucumber --profile html_report --format --out=FILE --require
    19. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features • cucumber features/admin* • cucumber features/hola.feature • cucumber features/hola.feature --line 10 • cucumber --profile html_report --format --out=FILE --require --no-source
    20. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features • cucumber features/admin* • cucumber features/hola.feature • cucumber features/hola.feature --line 10 • cucumber --profile html_report --format --dry-run --out=FILE --require --no-source
    21. Script • script/cucumber • cucumber (default profile en cucumber.yml) • cucumber features • cucumber features/admin* • cucumber features/hola.feature • cucumber features/hola.feature --line 10 • cucumber --profile html_report --format --dry-run --out=FILE --require --no-source --language
    22. Tarea de Rake Cucumber::Rake::Task.new(:features) do |t| t.cucumber_opts = \"--format pretty\" end
    23. Tarea de Rake Cucumber::Rake::Task.new(:features) do |t| t.cucumber_opts = \"--format pretty\" end attr_accessors: cucumber_opts step_pattern / step_list feature_pattern / feature_list rcov / rcov_opts libs / binary
    24. Feedback Fichero y linea del escenario... Scenario: with change something changes # features/edition.feature:15 Given authentication is disabled # features/steps/given_wiki.rb:6 And I have a page called \"readme\" with \"Thanks!\" # features/steps/given_wiki.rb:2 When I visit /readme # features/steps/when_interactions.rb:39 And I follow \"Edit\" # features/steps/when_interactions.rb:11 And I fill in \"body\" with \"This is my changed wiki page!\" # features/steps/when_interactions.rb:15 And I press \"send\" # features/steps/when_interactions.rb:3 can't convert Symbol into String (TypeError) /Library/Ruby/Gems/1.8/gems/activesupport-2.2.0/lib/active_support/inflector.rb:261:in `escape' ./features/steps/../../sinatra_wiki.rb:39 Then I should see \"readme\" # features/steps/then_results.rb:2 And I should NOT see \"Thanks!\" # features/steps/then_results.rb:6 And I should see \"This is my changed wiki page!\" # features/steps/then_results.rb:2 49 steps passed 4 steps failed 11 steps skipped
    25. Feedback Fichero y linea del escenario... cucumber features/edition.feature --line 15 Scenario: with change something changes # features/edition.feature:15 Given authentication is disabled # features/steps/given_wiki.rb:6 And I have a page called \"readme\" with \"Thanks!\" # features/steps/given_wiki.rb:2 When I visit /readme # features/steps/when_interactions.rb:39 And I follow \"Edit\" # features/steps/when_interactions.rb:11 And I fill in \"body\" with \"This is my changed wiki page!\" # features/steps/when_interactions.rb:15 And I press \"send\" # features/steps/when_interactions.rb:3 can't convert Symbol into String (TypeError) /Library/Ruby/Gems/1.8/gems/activesupport-2.2.0/lib/active_support/inflector.rb:261:in `escape' ./features/steps/../../sinatra_wiki.rb:39 Then I should see \"readme\" # features/steps/then_results.rb:2 And I should NOT see \"Thanks!\" # features/steps/then_results.rb:6 And I should see \"This is my changed wiki page!\" # features/steps/then_results.rb:2 49 steps passed 4 steps failed 11 steps skipped
    26. Feedback Fichero y linea del escenario... cucumber features/edition.feature --line 15 ... y del step con parametros subrayados When /^I visit (.+)$/ do |url| Scenario: with change something changes # features/edition.feature:15 Given authentication is disabled # features/steps/given_wiki.rb:6 And I have a page called \"readme\" with \"Thanks!\" # features/steps/given_wiki.rb:2 When I visit /readme # features/steps/when_interactions.rb:39 And I follow \"Edit\" # features/steps/when_interactions.rb:11 And I fill in \"body\" with \"This is my changed wiki page!\" # features/steps/when_interactions.rb:15 And I press \"send\" # features/steps/when_interactions.rb:3 can't convert Symbol into String (TypeError) /Library/Ruby/Gems/1.8/gems/activesupport-2.2.0/lib/active_support/inflector.rb:261:in `escape' ./features/steps/../../sinatra_wiki.rb:39 Then I should see \"readme\" # features/steps/then_results.rb:2 And I should NOT see \"Thanks!\" # features/steps/then_results.rb:6 And I should see \"This is my changed wiki page!\" # features/steps/then_results.rb:2 49 steps passed 4 steps failed 11 steps skipped
    27. Feedback Fichero y linea del escenario... cucumber features/edition.feature --line 15 ... y del step con parametros subrayados When /^I visit (.+)$/ do |url| Coloreado completo (casi, lo veremos mas adelante) Scenario: with change something changes # features/edition.feature:15 Given authentication is disabled # features/steps/given_wiki.rb:6 And I have a page called \"readme\" with \"Thanks!\" # features/steps/given_wiki.rb:2 When I visit /readme # features/steps/when_interactions.rb:39 And I follow \"Edit\" # features/steps/when_interactions.rb:11 And I fill in \"body\" with \"This is my changed wiki page!\" # features/steps/when_interactions.rb:15 And I press \"send\" # features/steps/when_interactions.rb:3 Then I should see \"readme\" # features/steps/then_results.rb:2 And I should NOT see \"Thanks!\" # features/steps/then_results.rb:6 And I should see \"This is my changed wiki page!\" # features/steps/then_results.rb:2 49 steps passed 3 steps failed 11 steps skipped 1 step pending
    28. Feedback Fichero y linea del escenario... cucumber features/edition.feature --line 15 ... y del step con parametros subrayados When /^I visit (.+)$/ do |url| Coloreado completo (casi, lo veremos mas adelante) y step snippets! Scenario: with change something changes # features/edition.feature:15 Given authentication is disabled # features/steps/given_wiki.rb:6 And I have a page called \"readme\" with \"Thanks!\" # features/steps/given_wiki.rb:2 When I visit /readme # features/steps/when_interactions.rb:39 And I follow \"Edit\" # features/steps/when_interactions.rb:11 And I fill in \"body\" with \"This is my changed wiki page!\" # features/steps/when_interactions.rb:15 And I press \"send\" # features/steps/when_interactions.rb:3 Then I should see \"readme\" # features/steps/then_results.rb:2 And I should NOT see \"Thanks!\" # features/steps/then_results.rb:6 And I should see \"This is my changed wiki page!\" # features/steps/then_results.rb:2 49 steps passed 3 steps failed 11 steps skipped 1 step pending You can use these snippets to implement pending steps: Then /^I press “send”$/ do end
    29. Deteccion de Ambiguedades Given /Tres (.*) ciegos/ do |animal| Given /Tres gatos (.*)/ do |handicap| Given /Tres (.+) (.+)/ do |animal, handicap| Te obliga a ser mas DRY Mejora la mantenibilidad
    30. FIT Tables Característica: saludo localizado Para entender el mensaje de bienvenida Como un usuario Quiero que me saluden en mi idioma Escenario: Locale del browser Dado que el locale de mi browser es 'es_ES' Cuando visito la home Entonces vere el texto 'Buenos Dias Salao!' More i18n Examples: | locale | page | Saludo | | es_CA ! home | Bones Salat! | | en_US ! home | Good Day Salty! |
    31. FIT Steps Dado el usuario Raimond de BeBanjo con email voodoo@example.com nacido en Mallorca en 1982 Y el usuario Nando de TheCocktail con email nando@example.com nacido en Madrid en 1973 Y el usuario Wadus de BeTheWadus con email wadus@example.com nacido en WadusLand en 1847
    32. FIT Steps Dado el usuario Raimond de BeBanjo con email voodoo@example.com nacido en Mallorca en 1982 Y el usuario Nando de TheCocktail con email nando@example.com nacido en Madrid en 1973 Y el usuario Wadus de BeTheWadus con email wadus@example.com nacido en WadusLand en 1847 Dado que existen los siguientes usuarios | nombre | empresa | correo-e | ciudad | ano | | Raimond | BeBanjo | voodoo@example.com | Mallorca | 1982 | | Nando | TheCocktail | nando@example.com | Madrid | 1973 | | Wadus | BeTheWadus | wadus@example.com | WadusLand | 1847 |
    33. FIT Steps Dado el usuario Raimond de BeBanjo con email voodoo@example.com nacido en Mallorca en 1982 Y el usuario Nando de TheCocktail con email nando@example.com nacido en Madrid en 1973 Y el usuario Wadus de BeTheWadus con email wadus@example.com nacido en WadusLand en 1847 Dado que existen los siguientes usuarios | nombre | empresa | correo-e | ciudad | ano | | Raimond | BeBanjo | voodoo@example.com | Mallorca | 1982 | | Nando | TheCocktail | nando@example.com | Madrid | 1973 | | Wadus | BeTheWadus | wadus@example.com | WadusLand | 1847 | Given /que existen los siguientes usuarios/ do |usuarios| #Array de hashes, del tipo {:nombre => ‘Wadus’, ....} end
    34. Autotest Flow: •Ejecuta tus specs hasta que todos pasen •Ejecuta tus escenarios fallidos hasta que pasen •Despues ejecuta todos sus specs otra vez •Y todos los features Puesta en marcha: $ sudo gem install ZenTest $ AUTOFEATURE=true autospec
    35. Perfiles RAILS_ROOT/cucumber.yml default: --language es features html: --language es --format html features performance: --language es --format profile features
    36. Perfiles RAILS_ROOT/cucumber.yml default: --language es features html: --language es --format html features performance: --language es --format profile features $ cucumber --profile performance Profiling enabled. ................................................................ Top 10 average slowest steps with 5 slowest matches: 0.0048184 When /^I (try)?(?: to )?visit [\"']?([^\"']+)[\"']?$/i # features/steps/when_interactions.rb:39 0.0290940 When I visit /brand-new # features/creation.feature:8 0.0038860 When I visit /brand-new # features/creation.feature:25 0.0035640 When I visit the home # features/destruction.feature:9 0.0018260 When I visit the home # features/home.feature:8 0.0017800 When I visit the home # features/destruction.feature:28 0.0039920 When /^I press [\"']?([^\"']+)[\"']?$/i # features/steps/when_interactions.rb:3 0.0057240 And I press \"send\" # features/creation.feature:10 0.0043170 And I press \"send\" # features/edition.feature:11 0.0035290 And I press \"send\" # features/creation.feature:27 0.0023980 And I press \"send\" # features/edition.feature:21
    37. i18n lib/cucumber/languages.yml cucumber --language es feature: Característica scenario: Escenario given_scenario: DadoElEscenario given: Dado when: Cuando then: Entonces and: Y
    38. Ejemplo features/atencion.feature Característica: Mantener Atencion Para que todo el mundo use Cucumber Como desarollador agil Quiero mantener la atencion de la audiencia durante la ponencia Escenario: Presentando la ponencia de Cucumber Dado Que presentamos una propuesta para la Conferencia Rails 2008 Y Que nos las aceptan Y Que mandamos nuestras fotos xuflas Y Que confirmamos nuestra asistencia Y Que logramos llegar a tiempo despues de pillarnos un pedo en la cena del jueves Escenario: Crisis Temporal DadoElEscenario: Presentando la ponencia de Cucumber Y Que la audiencia comienza a quedarse sopa Cuando pulsamos “CTRL + SHIFT + R” Entonces sale una foto de unas tetas curiosas Y la gente se pone muy contenta Y algunos se rien Escenario: Exito Total DadoElEscenario: Presentando la ponencia de Cucumber Y Que la audiencia comienze a excitarse Cuando pulsamos “CTRL + R” Entonces sale una foto de media teta intrigante Y la gente se pone pensativa
    39. Declarative vs Imperative
    40. Estilo Imperativo Cuando voy a la pagina de registrarme Y relleno el campo 'email' con 'wadus@wadusland.com' Y relleno el campo 'nombre' con 'wadus' Y relleno el campo 'ciudad' con 'WadusLand' Y relleno el campo 'telefono' con '111-999-333' Y pincho en el boton 'Registrarme!' Entonces 'wadus@wadusland.com' recibira un email Y tendra como 'asunto' 'Bienvenido a WadusLand.com'
    41. Estilo Imperativo Cuando voy a la pagina de registrarme Y relleno el campo 'email' con 'wadus@wadusland.com' Y relleno el campo 'nombre' con 'wadus' Y relleno el campo 'ciudad' con 'WadusLand' Y relleno el campo 'telefono' con '111-999-333' Y pincho en el boton 'Registrarme!' Entonces 'wadus@wadusland.com' recibira un email Y tendra como 'asunto' 'Bienvenido a WadusLand.com' • En el estilo IMPERATIVO lo importante es, COMO se consigue el objectivo
    42. Estilo Declarativo Cuando un nuevo usuario se registra Entonces recibira un email con el 'asunto' 'Bienvenido a WadusLand.com'
    43. Estilo Declarativo Cuando un nuevo usuario se registra Entonces recibira un email con el 'asunto' 'Bienvenido a WadusLand.com' • En el estilo DECLARATIVO, lo importante es el QUE es nuestro objetivo
    44. Declarative vs Imperative Cual usar? pues depende del caso. Quien va a leer la historia? hombre de negocio o desarrollador? Que quieres testear y resaltar en esa historia? Arte?
    45. Big Picture
    46. Nuestro Picture
    47. Selenium setup en The Cocktail Servidor CruiseControl: Linux Debian con Selenium-1.1.14.gem (selenium-driver, cliente) Build Secuencial (lanza APP siempre en el puerto 3000) Servidor de Selenium Remote Control: Instancia Xen con Windows XP (sin ruby instalado) java 1.6.0 & ant 1.7.0 selenium-server-0.9.2 > java -jar selenium-server.jar Resolvemos test.host y www.example.com hacia la IP CruiseControl
    48. The Cocktail Build task :cruise => :environment do ENV['SELENIUM_SERVER'] = \"selenium-server\" ENV['SELENIUM_BROWSER'] = \"*iexplore C:\\\\Archivos de programa\\\\MultipleIEs\\\\IE6\\\\iexplore.exe\" Rake::Task['features'].invoke Rake::Task['features_with_ajax'].invoke end Cucumber::Rake::Task.new(:features_with_ajax) do |t| t.cucumber_opts = \"--profile ajax\" t.feature_pattern = \"features/caracteristicas_ajax/**/*.feature\" t.step_list = \"features/step_definitions/support/selenium_env.rb\" end Cucumber::Rake::Task.new(:features) do |t| t.cucumber_opts = \"--profile webrat\" t.feature_pattern = \"features/caracteristicas/**/*.feature\" t.step_list = \"features/step_definitions/support/webrat_env.rb\" end selenium_env.rb app_server_pid = fork do [STDOUT, STDERR].each {|f| f.reopen('/dev/null','w')} exec \"script/server -e #{ENV['RAILS_ENV']} -p #{apport}\" end $selenium_driver = Selenium::SeleniumDriver.new(selenium_server, 4444, browser, appurl, 15000) $selenium_driver.start at_exit do $selenium_driver.stop Process.kill(9, app_server_pid) end
    49. Selenium setup en Bebanjo • Todo en el mismo Servidor (SliceHost) Ubuntu Cruise(git) gema Selenium-1.1.14 Xterm (Firefox)
    50. Bebanjo Build task :cruise do sh \"script/cucumber features --profile webrat\" with_servers do sh \"script/cucumber features --profile selenium\" end end def with_servers xserver_pid = run_command(\"startx -- `which Xvfb` :1 -screen 0 1024x768x24\") selenium_pid = run_command(\"sh -c 'DISPLAY=:1 selenium'\") webserver_pid = run_command(\"script/server -e test -p #{ENV['WEBSERVER_PORT'] || 3000}\") yield ensure system(\"killall xterm\") Process.kill(9, webserver_pid) require 'selenium' Selenium::SeleniumServer.new.stop end def run_command(cmd) fork do [STDOUT,STDERR].each {|f| f.reopen '/dev/null', 'w' } exec cmd end end Selenium::SeleniumDriver.new( \"localhost\", 4444, \"*chrome\", # selenium-server, puerto, browser \"http://localhost:3000\", 15000) # servidor de aplicacion, timeout
    51. Selenium-Grid > ant launch-hub > ant -Dport=5555 -Denvironment=\"IExplorer6\" launch-remote-control > ant -Dport=5556 -Denvironment=\"Firefox3\" launch-remote-control > ant -Dport=5557 -Denvironment=\"GChrome\" launch-remote-control SELENIUM_BROWSERS = { :firefox => 'SELENIUM_BROWSER=\"Firefox3\"', :googlechrome => 'RAILS_ENV=test_chrome SELENIUM_BROWSER=\"GChrome\" SELENIUM_APPORT=3001', :iexplorer => 'RAILS_ENV=test_iexplorer SELENIUM_BROWSER=\"IExplorer6\" SELENIUM_APPORT=3002' } task :features_in_selenium_grid do pids, failures_in = {}, [] SELENIUM_BROWSERS.each do |key, hash| pid = fork { exec(hash[:env] + ' SELENIUM_SERVER=selenium-server cucumber --profile selenium') } pids[pid] = key end SELENIUM_BROWSERS.size.times do Process.wait failures_in << pids[$?.pid] if $?.exitstatus == 0 end raise 'Features failure in ' + failures_in.join(' and ') unless failures_in.empty? end
    52. TestJour $ mkdir testjour-working-dir $ testjour slave:start $ testjour list Testjour servers: wadus available wadus-computer.local.:182499 $ testjour run features
    53. Ventajas • Acerca el lenguaje empleado por el cliente (o business) • Abre la spec a todos los miembros del equipo (cliente incluido) • Emerge el vocabulario de la app (comunicacion mas precisa) • Integración de toda la aplicación (JavaScript incluido) • Ausencia de \"paginas huerfanas\" (de forma centralizada)
    54. Ventajas • Acerca el lenguaje empleado por el cliente (o business) • Abre la spec a todos los miembros del equipo (cliente incluido) • Emerge el vocabulario de la app (comunicacion mas precisa) • Integración de toda la aplicación (JavaScript incluido) • Ausencia de \"paginas huerfanas\" (de forma centralizada) y ademas: • VERDE (no es COBOL)
    55. Inconvenientes • Una mismo paso se puede expresar de mil formas • lentos? • funcionalidades globales en el layout • cuando spec y cuando feature • pocas convenciones...
    56. Inconvenientes • lentos? • funcionalidades globales en el layout • cuando spec y cuando feature • pocas convenciones... • VERDE (no es COBOL)
    57. Paranoias y Deseos Imaginemos que ya tenemos todas las step_definitions escritas. Cuando escribo una nueva feature... que hago? la comiteo petando el build? me creo un rama ad-hoc? creo un archivo/directorio especial? presssssssssss? !BASTA DE NIAPAS! Scenario: with change something changes # features/edition.feature:15 Given authentication is disabled # features/steps/given_wiki.rb:6 And I have a page called \"readme\" with \"Thanks!\" # features/steps/given_wiki.rb:2 When I visit /readme # features/steps/when_interactions.rb:39 And I follow \"Edit\" # features/steps/when_interactions.rb:11 And I fill in \"body\" with \"This is my changed wiki page!\" # features/steps/when_interactions.rb:15 And I press \"send\" # features/steps/when_interactions.rb:3 Then I should see \"readme\" # features/steps/then_results.rb:2 And I should NOT see \"Thanks!\" # features/steps/then_results.rb:6 And I should see \"This is my changed wiki page!\" # features/steps/then_results.rb:2 49 steps passed 3 steps failed 11 steps skipped 1 step TODO (step definition done but pending app implementation)
    58. Paranoias y Deseos • Problema: tenemos features con ajax y sin ajax separadas en diferentes archivos relacionadas con la mism feature, lo queremos todo junto. • Solucion: profile por escenario (HTML / JavaScript) • Problema: Testear unobtrusive-javascript sin duplicar escenarios. • Solucion: ProfileGroup (unobtrusive = html profile + javascript profile) Ademas que en el step definition sepamos el contexto (profile!) en el que se esta/debe ejectuarse (http, javascript) • Problema: usar fit tables en un escenario con muchas variables, Solucion: no se conoce hasta ahora...
    59. Tip para reutilizar steps pensando en resources <li class='evento'> <p><h3>Descripcion</h3> para testear este codigo html <span>Conferencia Ruby Euroko 2009</span> </p> </li> <% content_tag_for :li, evento do %> <p class=\"descripcion\"> podemos usar el <%= evento.descripcion %> content_tag_for en las vistas </p> <% end %> y este step re-usable para todos los resources Then \"he should see the text '$text' within the $resource '$resource_attribute'\" do |text, resource, resource_attribute| response_body.should have_tag_with_child(\".#{resource}\", \"*\", /#{resource_attribute}/) do with_tag(\"*\", /#{text}/) end end
    60. Tips • /i case insensitive, mayusculas y minusculas, que mas da! • shouldify, not_shouldify • try_if_try, 40X response children = @resource.send(child_model.table_name) blog.posts child = @resource.send(child_model.name.downcase) blog.user • def unquote(text) text =~ /^['\"](.*)['\"]$/ ? $1 : text end end ‘edit article’, “edit article”, edit article • selenium -browserSessionReuse &
    61. more tips - Parentesis Grouping-only en RegExps: /(?:...)/ Por ejemplo: ...(?:(?:en|con) estado|como)?... Cazaria: Dado que la categoria BDD tiene 3 libros Y que dichos libros estan publicados o bien: Y que dichos libros estan como publicados Y que dichos libros estan en estado publicado
    62. anti-dolores tip • si en un step utilizamos RegExp no podemos usar variables $ • selenium setup for ie6 > java -jar selenium-server.jar -interactive ... cmd=getNewBrowserSession&1=*iexplore&2=http://test.host:3000 (...y podemos cerrar el navegador que nos abre)
    63. GRACIAS! • Gracias a Mamuso por el casco para volver a casa en moto a las tantas • Gracias a Macla por la foto de la ensalada • Gracias a nuestros jefes por darnos el miercoles para terminar la ponencia • Gracias a Vosotros por haber venido! • Preguntas? http://github.com/voodoorai2000/conferenciarails2008

    + fernando.garciafernando.garcia, 11 months ago

    custom

    1526 views, 3 favs, 3 embeds more stats

    Conferencia Rails 2008

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1526
      • 1472 on SlideShare
      • 54 from embeds
    • Comments 0
    • Favorites 3
    • Downloads 27
    Most viewed embeds
    • 32 views on http://www.lacoctelera.com
    • 21 views on http://nando.lacoctelera.net
    • 1 views on http://static.slideshare.net

    more

    All embeds
    • 32 views on http://www.lacoctelera.com
    • 21 views on http://nando.lacoctelera.net
    • 1 views on http://static.slideshare.net

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories