SlideShare a Scribd company logo
1 of 111
Download to read offline
Cross-­‐browser

              tes*ng     in	
  the



                     real	
  world
Mar*n	
  Kleppmann              rapportive
http://www.flickr.com/photos/stuart_spivack/2322070560/
Cross-­‐browser

              tes*ng     in	
  the



                     real	
  world
Mar*n	
  Kleppmann              rapportive
Cross-­‐browser
                                     urgh

              tes*ng     in	
  the



                     real	
  world
Mar*n	
  Kleppmann              rapportive
Cross-­‐browser

              tes*ng     in	
  the



                     real	
  world
Mar*n	
  Kleppmann              rapportive
Cross-­‐browser

              tes*ng     in	
  the
     mess
         y
                     real	
  world
Mar*n	
  Kleppmann              rapportive
Cross-­‐browser

              tes*ng     in	
  the



                     real	
  world
Mar*n	
  Kleppmann              rapportive
Cross-­‐browser                 t?
                                a ?
                              h
                             w ow
                              h
              tes*ng     in	
  the



                     real	
  world
Mar*n	
  Kleppmann              rapportive
Tes*ng	
  what?
Tes*ng	
  what?
 Unit	
  tes(ng
 Applica(on
 End-­‐to-­‐end
 (incl.	
  external	
  services)
Tes*ng	
  why?
Tes*ng	
  why?
  Func(onal
    Visual
 Performance
Load/Scalability
   Security
   Usability
Tes*ng	
  how?
Tes*ng	
  how?
   Automated
(TDD,	
  BDD,	
  regression	
  tests,
         smoke	
  tests,	
  ...)


        Manual
   (exploratory,	
  scripted,
     user-­‐centered,	
  ...)
Tes*ng	
  dimensions
Unit   Applica(on     End-­‐to-­‐end

Func(onal Visual Performance
Load      Security      Usability

   Automated         Manual
Tes*ng	
  dimensions
Unit   Applica(on     End-­‐to-­‐end

Func(onal Visual Performance
Load      Security      Usability

   Automated         Manual
Tes*ng	
  dimensions
Unit   Applica(on    End-­‐to-­‐end
                  RSpec/
Func(onal Visual Performance
                  Shoulda/
Load     Security whatever
                     Usability

   Automated        Manual
Tes*ng	
  dimensions
Unit   Applica(on     End-­‐to-­‐end

Func(onal Visual Performance
Load      Security      Usability

   Automated         Manual
Tes*ng	
  dimensions
Unit   Applica(on     End-­‐to-­‐end

Func(onal Visual Performance
Load      Security      Usability

   Automated         Manual
(Side-­‐note)
                     	
  wri te
              a n    ’t
    Yo u 	
  c           cs
              R S   p  e
                         b i li ty
               r	
  u s a
        fo
Tes*ng	
  dimensions
Unit   Applica(on     End-­‐to-­‐end

Func(onal Visual Performance
Load      Security      Usability

   Automated         Manual
Tes*ng	
  dimensions
Unit   Applica(on     End-­‐to-­‐end

Func(onal Visual Performance
Load      Security      Usability

   Automated         Manual
Me
http://www.flickr.com/photos/71263221@N00/4230334515/
P.S.	
  We’re	
  hiring!
http://www.flickr.com/photos/snake-eyes/410092369/
Anyway.
C++
C++
C++




WebDriver
WebDriver
   C++
WebDriver
WebDriver
Selenium	
  2
WebDriver
Cucumber/RSpec/whatever

      Selenium	
  2
       WebDriver
Cucumber/RSpec/whatever

      Selenium	
  2
       WebDriver
Cucumber/RSpec/whatever

Selenium	
  2
WebDriver
Cucumber/RSpec/whatever



Selenium	
  2
WebDriver
Cucumber/RSpec/whatever



Selenium	
  2
WebDriver
Cucumber/RSpec/whatever

           Capybara

Selenium	
  2
WebDriver
Cucumber/RSpec/whatever

           Capybara

Selenium	
  2
                *Wa(r
WebDriver
Cucumber/RSpec/whatever

           Capybara

Selenium	
  2
                *Wa(r
WebDriver
Cucumber/RSpec/whatever

           Capybara

Selenium	
  2
                *Wa(r
WebDriver
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
Cucumber/RSpec/whatever

           Capybara
                       Culerity
OMGWTFBBQ?!
Selenium	
  2
    *Wa(r
WebDriver               Celerity
                      HTML
                       Unit
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
http://www.flickr.com/photos/snake-eyes/449442699/
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
require 'watir'
Watir::Browser.default = 'firefox'

describe 'Google' do
  before(:each) { @browser = Watir::Browser.new }
  after(:each) { @browser.close }

  it 'should return search results for "hello world"' do
    @browser.goto "http://www.google.co.uk"
    @browser.text_field(:name, "q").set("hello world")
    @browser.button(:name, "btnG").click
    @browser.contains_text(
      "Hello world program - Wikipedia").should be_true
  end
end
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
require 'selenium-webdriver'

describe 'Google' do
  before(:each){ @browser = Selenium::WebDriver.for :firefox }
  after(:each) { @browser.quit }

  it 'should return search results for "hello world"' do
    @browser.navigate.to "http://www.google.co.uk"
    @browser.find_element(:name, "q").send_keys("hello world")
    @browser.find_element(:name, "btnG").submit
    @browser.find_element(:partial_link_text,
      "Hello world program - Wikipedia")
  end
end
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
Cucumber/RSpec/whatever

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
require 'capybara'; require 'capybara/dsl'
Capybara.default_driver = :selenium

Spec::Runner.configure do |config|
  config.include(Capybara, :type => :integration)
  config.before(:each) { Capybara.reset_sessions! }
end

describe 'Google' do
  it 'should return search results for "hello world"' do
    visit "http://www.google.co.uk"
    fill_in "q", :with => "hello world"
    click "Google Search"
    page.should have_content(
      "Hello world program - Wikipedia")
  end
end
# API beauty contest!


goto "http://www.google.co.uk"              # Watir
navigate.to "http://www.google.co.uk"       # WebDriver
visit "http://www.google.co.uk"             # Capybara


text_field(:name, "q").set("hello world")   # Watir
find_element(:name, "q").send_keys("hello world") # WD
fill_in "q", :with => "hello world"         # Capybara


button(:name, "btnG").click                 # Watir
find_element(:name, "btnG").submit          # WebDriver
click "Google Search"                       # Capybara


# You choose...
Cucumber

           Capybara
                         Culerity
Selenium	
  2
                *Wa(r
WebDriver                 Celerity
                        HTML
                         Unit
Feature: Looking up a contact
  In order to understand my contacts better
  As a Gmail user
  I want to see social information next to my email thread

 Scenario: Load an email conversation
   Given I am logged into Gmail
   And Rapportive is loaded
   When I search for "martin@rapportive.com"
   And I click on the conversation with subject "Testing 1 2 3"
   Then I should be on a conversation view
   And Rapportive should show "Co-founder at Rapportive"
Given /^I am logged into Gmail$/ do
  visit 'https://mail.google.com/a/rapportive.com'
  fill_in 'Email', :with => 'test'
  fill_in 'Passwd', :with => GMAIL_TEST_ACCOUNT_PASSWORD
  click 'Sign in'
end



Then /^Rapportive should show "([^"]*)"$/ do |text_to_show|
  page.within_frame('canvas_frame') do
    page.within(:css, '#rapportive-sidebar') do
      page.should have_content(text_to_show)
    end
  end
end
Ok.
FEI
    (Frequently	
  
Encountered	
  Issues)
10.	
  Time	
  dependence
10.	
  Time	
  dependence
  ‣ Modify	
  date(mes	
  in	
  DB	
  
    using	
  models
  ‣ Create	
  wrapper	
  around	
  
    Time.now
9.	
  Real-­‐*me	
  comms
8.	
  Managing	
  test	
  VMs
8.	
  Managing	
  test	
  VMs
  ‣ Very	
  tedious	
  (updates	
  etc.)
  ‣ Test	
  management	
  
    infrastructure
  ‣ Commercial	
  services	
  (e.g.	
  
    Sauce	
  Labs,	
  BrowserMob)
7.	
  Random	
  DOM	
  IDs
7.	
  Random	
  DOM	
  IDs
 ‣ Ext.js,	
  GWT,	
  Cappuccino
 ‣ Use	
  toolkit	
  APIs
   // Selecting an item in a Ext.js Combo Box
   var combo = Ext.getCmp('countryComboBox');
   combo.setValue('Germany');
   // setValue() doesn't trigger the event
   combo.fireEvent('select');
6.	
  Tes*ng	
  layout
6.	
  Tes*ng	
  layout
‣ Automa(cally	
  spoWng	
  
  broken	
  layout?	
  srsly?
‣ Interes(ng	
  experiment
  h"p://code.google.com/p/figh/ng-­‐layout-­‐bugs/
$(‘*’).css(‘color’,	
  ‘white’);
$(‘*’).css(‘color’,	
  ‘black’);
image1	
  –	
  image2	
  =	
  ...
5.	
  Unit	
  tes*ng	
  JS
5.	
  Unit	
  tes*ng	
  JS
‣ Command	
  line	
  &&	
  browser
‣ DOM	
  manipula(on	
  →	
  HTML	
  
  fixtures	
  	
  (...and	
  rollback?)
5.	
  Unit	
  tes*ng	
  JS
‣ JSpec
 h"p://visionmedia.github.com/jspec/

‣ Blue	
  Ridge/Screw.Unit
 h"p://github.com/relevance/blue-­‐ridge

‣ JsTestDriver
 h"p://code.google.com/p/js-­‐test-­‐driver/
4.	
  Model	
  layer	
  access
4.	
  Model	
  layer	
  access
 Tests
            HTTP/Framework
                   Views
              Controllers
                 Models
4.	
  Model	
  layer	
  access
  Tests
            HTTP/Framework
                   Views
              Controllers
Factory/
Fixtures?        Models
4.	
  Model	
  layer	
  access
  ‣ Violates	
  abstrac(on
  ‣ BUT:	
  factories	
  =	
  only	
  sane	
  
    way	
  of	
  managing	
  DB	
  state
Factory.define :user do |u|
  u.first_name 'John'
  u.last_name 'Doe'
  u.admin false
end



Given /^I am on John's profile page$/ do
  user = Factory.create(:user)
  visit user_url(user)
end
3.	
  Star*ng	
  state
3.	
  Star*ng	
  state
‣ Previous,	
  failed	
  tests
‣ Cookies,	
  browser	
  cache
‣ Unexpected	
  persistent	
  state
3.	
  Star*ng	
  state
‣ Long-­‐running	
  transac(on	
  &	
  
  rollback
  (e.g.	
  Cucumber	
  per-­‐scenario	
  transac/on	
  rollback)

‣ Clean	
  up	
  database
  h"p://github.com/bmabey/database_cleaner
2.	
  Parallel	
  test	
  runs
2.	
  Parallel	
  test	
  runs
‣ End-­‐to-­‐end	
  tests	
  are	
  SLOW
‣ Start	
  up	
  several	
  browsers
  (TestSwarm,	
  Selenium	
  Grid,	
  ...)

‣ BUT:	
  concurrent	
  
  modifica(on	
  of	
  DB	
  state!
2.	
  Parallel	
  test	
  runs
One	
  DB	
  per	
  test	
  process
‣ h"p://github.com/grosser/parallel_tests
‣ h"p://github.com/qxjit/deep-­‐test
2.	
  Parallel	
  test	
  runs
Caveat:	
  state	
  outside	
  of	
  your	
  
control
‣ e.g.	
  OAuth	
  status
‣ use	
  mocks,	
  or	
  work	
  around	
  it
1.
Fragility
Fragility
(tests	
  break	
  too	
  easily,	
  
 even	
  if	
  the	
  app	
  is	
  ok)
2	
  schools	
  of	
  thought
1. “Disposable”	
  test	
  scripts
   (invest	
  licle	
  effort,	
  use	
  
   recording	
  tools)

2. “Engineered”	
  test	
  scripts
   (use	
  carefully	
  designed	
  
   abstrac(ons)
Feature: Looking up a contact
  In order to understand my contacts better
  As a Gmail user
  I want to see social information next to my email thread

 Scenario: Load an email conversation
   Given I am logged into Gmail
   And Rapportive is loaded
   When I search for "martin@rapportive.com"
   And I click on the conversation with subject "Testing 1 2 3"
   Then I should be on a conversation view
   And Rapportive should show "Co-founder at Rapportive"
Fragility
No	
  silver	
  bullet,	
  obvious	
  stuff:
‣ Consistent	
  naming	
  of	
  IDs	
  &	
  
  CSS	
  classes
‣ Maintain	
  &	
  refactor	
  your	
  
  tests
kthxbai



Mar*n	
  Kleppmann
mar*n@rappor*ve.com
@mar*nkl              rapportive

More Related Content

What's hot

Enterprise Build And Test In The Cloud
Enterprise Build And Test In The CloudEnterprise Build And Test In The Cloud
Enterprise Build And Test In The Cloud
Carlos Sanchez
 
Integration Testing With Cucumber How To Test Anything J A O O 2009
Integration Testing With  Cucumber    How To Test Anything    J A O O 2009Integration Testing With  Cucumber    How To Test Anything    J A O O 2009
Integration Testing With Cucumber How To Test Anything J A O O 2009
Dr Nic Williams
 

What's hot (20)

A Gentle Introduction to Angular Schematics - Angular SF 2019
A Gentle Introduction to Angular Schematics - Angular SF 2019A Gentle Introduction to Angular Schematics - Angular SF 2019
A Gentle Introduction to Angular Schematics - Angular SF 2019
 
Testing Web Applications
Testing Web ApplicationsTesting Web Applications
Testing Web Applications
 
High Performance JavaScript 2011
High Performance JavaScript 2011High Performance JavaScript 2011
High Performance JavaScript 2011
 
Developing, Testing and Scaling with Apache Camel - UberConf 2015
Developing, Testing and Scaling with Apache Camel - UberConf 2015Developing, Testing and Scaling with Apache Camel - UberConf 2015
Developing, Testing and Scaling with Apache Camel - UberConf 2015
 
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015
 
The Play Framework at LinkedIn
The Play Framework at LinkedInThe Play Framework at LinkedIn
The Play Framework at LinkedIn
 
Front-End Testing: Demystified
Front-End Testing: DemystifiedFront-End Testing: Demystified
Front-End Testing: Demystified
 
Developing Modern Java Web Applications with Java EE 7 and AngularJS
Developing Modern Java Web Applications with Java EE 7 and AngularJSDeveloping Modern Java Web Applications with Java EE 7 and AngularJS
Developing Modern Java Web Applications with Java EE 7 and AngularJS
 
High Performance JavaScript - jQuery Conference SF Bay Area 2010
High Performance JavaScript - jQuery Conference SF Bay Area 2010High Performance JavaScript - jQuery Conference SF Bay Area 2010
High Performance JavaScript - jQuery Conference SF Bay Area 2010
 
Enterprise Build And Test In The Cloud
Enterprise Build And Test In The CloudEnterprise Build And Test In The Cloud
Enterprise Build And Test In The Cloud
 
Testing Mobile JavaScript
Testing Mobile JavaScriptTesting Mobile JavaScript
Testing Mobile JavaScript
 
Session on Selenium 4 : What’s coming our way? by Hitesh Prajapati
Session on Selenium 4 : What’s coming our way? by Hitesh PrajapatiSession on Selenium 4 : What’s coming our way? by Hitesh Prajapati
Session on Selenium 4 : What’s coming our way? by Hitesh Prajapati
 
Integration Testing With Cucumber How To Test Anything J A O O 2009
Integration Testing With  Cucumber    How To Test Anything    J A O O 2009Integration Testing With  Cucumber    How To Test Anything    J A O O 2009
Integration Testing With Cucumber How To Test Anything J A O O 2009
 
Session on Selenium Powertools by Unmesh Gundecha
Session on Selenium Powertools by Unmesh GundechaSession on Selenium Powertools by Unmesh Gundecha
Session on Selenium Powertools by Unmesh Gundecha
 
Join the darkside: Selenium testing with Nightwatch.js
Join the darkside: Selenium testing with Nightwatch.jsJoin the darkside: Selenium testing with Nightwatch.js
Join the darkside: Selenium testing with Nightwatch.js
 
jQuery Proven Performance Tips & Tricks
jQuery Proven Performance Tips & TricksjQuery Proven Performance Tips & Tricks
jQuery Proven Performance Tips & Tricks
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
 
Selenium Tips & Tricks - StarWest 2015
Selenium Tips & Tricks - StarWest 2015Selenium Tips & Tricks - StarWest 2015
Selenium Tips & Tricks - StarWest 2015
 
Avoiding Common Pitfalls in Ember.js
Avoiding Common Pitfalls in Ember.jsAvoiding Common Pitfalls in Ember.js
Avoiding Common Pitfalls in Ember.js
 
Bootiful Development with Spring Boot and React - UberConf 2018
Bootiful Development with Spring Boot and React - UberConf 2018Bootiful Development with Spring Boot and React - UberConf 2018
Bootiful Development with Spring Boot and React - UberConf 2018
 

Viewers also liked

SAP Testing Services
SAP Testing ServicesSAP Testing Services
SAP Testing Services
r_shanki
 

Viewers also liked (20)

Cross browser testing
Cross browser testingCross browser testing
Cross browser testing
 
How to do better Quality Assurance for Cross-Browser Testing
How to do better Quality Assurance for Cross-Browser TestingHow to do better Quality Assurance for Cross-Browser Testing
How to do better Quality Assurance for Cross-Browser Testing
 
Making cross browser tests beautiful
Making cross browser tests beautifulMaking cross browser tests beautiful
Making cross browser tests beautiful
 
Cross Browser Testing: El reto de la eficiencia
Cross Browser Testing: El reto de la eficienciaCross Browser Testing: El reto de la eficiencia
Cross Browser Testing: El reto de la eficiencia
 
Testing Content Effectiveness - Penn State 2015
Testing Content Effectiveness - Penn State 2015Testing Content Effectiveness - Penn State 2015
Testing Content Effectiveness - Penn State 2015
 
RWD Testing - Baiju Joseph
RWD Testing - Baiju JosephRWD Testing - Baiju Joseph
RWD Testing - Baiju Joseph
 
Testing – responsive web design
Testing – responsive web designTesting – responsive web design
Testing – responsive web design
 
Cross browser testing using BrowserStack
Cross browser testing using BrowserStack Cross browser testing using BrowserStack
Cross browser testing using BrowserStack
 
Content testing
Content testingContent testing
Content testing
 
12 Tips to Become a more Professional Tester
12 Tips to Become a more Professional Tester12 Tips to Become a more Professional Tester
12 Tips to Become a more Professional Tester
 
Building frameworks over Selenium
Building frameworks over SeleniumBuilding frameworks over Selenium
Building frameworks over Selenium
 
SAP MATERIAL MANAGEMENT(MM) ONLINE TRAINING IN USA|AUSTRALIA
SAP MATERIAL MANAGEMENT(MM) ONLINE TRAINING IN USA|AUSTRALIASAP MATERIAL MANAGEMENT(MM) ONLINE TRAINING IN USA|AUSTRALIA
SAP MATERIAL MANAGEMENT(MM) ONLINE TRAINING IN USA|AUSTRALIA
 
Tools that help and speed up RWD dev
Tools that help  and speed up RWD devTools that help  and speed up RWD dev
Tools that help and speed up RWD dev
 
The what, why and how of web analytics testing
The what, why and how of web analytics testingThe what, why and how of web analytics testing
The what, why and how of web analytics testing
 
Making the Transition from Manual to Automated Testing
Making the Transition from Manual to Automated TestingMaking the Transition from Manual to Automated Testing
Making the Transition from Manual to Automated Testing
 
Being a professional software tester
Being a professional software testerBeing a professional software tester
Being a professional software tester
 
Stc 2016 regional-round-iot testing in agile.
Stc 2016 regional-round-iot testing in agile.Stc 2016 regional-round-iot testing in agile.
Stc 2016 regional-round-iot testing in agile.
 
SAP Testing Services
SAP Testing ServicesSAP Testing Services
SAP Testing Services
 
Continuous Integration with Maven for Android apps
Continuous Integration with Maven for Android appsContinuous Integration with Maven for Android apps
Continuous Integration with Maven for Android apps
 
Selenium Grid
Selenium GridSelenium Grid
Selenium Grid
 

Similar to Cross-browser testing in the real world

Socket applications
Socket applicationsSocket applications
Socket applications
João Moura
 
Enterprise Build And Test In The Cloud
Enterprise Build And Test In The CloudEnterprise Build And Test In The Cloud
Enterprise Build And Test In The Cloud
Carlos Sanchez
 
Integration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + SeleniumIntegration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + Selenium
tka
 
Cucumber Presentation Kiev Meet Up
Cucumber Presentation Kiev Meet UpCucumber Presentation Kiev Meet Up
Cucumber Presentation Kiev Meet Up
dimakovalenko
 

Similar to Cross-browser testing in the real world (20)

Sprockets
SprocketsSprockets
Sprockets
 
Capybara
CapybaraCapybara
Capybara
 
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
 
Heavenly hell – automated tests at scale wojciech seliga
Heavenly hell – automated tests at scale   wojciech seligaHeavenly hell – automated tests at scale   wojciech seliga
Heavenly hell – automated tests at scale wojciech seliga
 
Socket applications
Socket applicationsSocket applications
Socket applications
 
Speedy TDD with Rails
Speedy TDD with RailsSpeedy TDD with Rails
Speedy TDD with Rails
 
Capybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using rubyCapybara and cucumber with DSL using ruby
Capybara and cucumber with DSL using ruby
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Enterprise Build And Test In The Cloud
Enterprise Build And Test In The CloudEnterprise Build And Test In The Cloud
Enterprise Build And Test In The Cloud
 
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
 
Selenium 2 - PyCon 2011
Selenium 2 - PyCon 2011Selenium 2 - PyCon 2011
Selenium 2 - PyCon 2011
 
Integration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + SeleniumIntegration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + Selenium
 
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsugFrom Spring Boot 2.2 to Spring Boot 2.3 #jsug
From Spring Boot 2.2 to Spring Boot 2.3 #jsug
 
Sinatra for REST services
Sinatra for REST servicesSinatra for REST services
Sinatra for REST services
 
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber       Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
Behavioural Testing Ruby/Rails Apps @ Scale - Rspec & Cucumber
 
Integration and Acceptance Testing
Integration and Acceptance TestingIntegration and Acceptance Testing
Integration and Acceptance Testing
 
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com RubyFisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
 
Cucumber Presentation Kiev Meet Up
Cucumber Presentation Kiev Meet UpCucumber Presentation Kiev Meet Up
Cucumber Presentation Kiev Meet Up
 
Selenium and Cucumber Selenium Conf 2011
Selenium and Cucumber Selenium Conf 2011Selenium and Cucumber Selenium Conf 2011
Selenium and Cucumber Selenium Conf 2011
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Recently uploaded (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 

Cross-browser testing in the real world