SlideShare une entreprise Scribd logo
1  sur  17
Lessons Learned: Migrating Tests To Selenium v2 September 20, 2011 Roger Hu (rhu@hearsaycorp.com)
Hearsay Social “If 2011 is the year of social media for business, Hearsay [Social] may have some say about it.” ,[object Object]
Enables reps to compliantly capitalize on LinkedIn, Twitter, and Facebook
Backed by Sequoia, NEA, Steve Chen, FB execs
Visionary founders and management team from GOOG, SFDC, MSFT, AMZN,[object Object]
Reasons to Switch Selenium v2 more closely approximates the user experience. Internet Explorer (IE7/IE8) especially runs faster with Selenium v2 (> 20%?) Easier to write tests. WebDriver reflects how other JavaScript frameworks work.
Selenium v2 Approach Example: driver = webdriver.Firefox() driver.find_element_by_xpath(“//a[text()=‘Create New Ad’”).click() driver.find_element_by_id(“ads_headline”).send_keys(“Selenium Testers Wanted”) Selenium server launches without needing proxy-based approach.  Browser driver generates native keyboard/mouse clicks to more closely simulate user behavior. WebDriver API (REST-based) simpler.    Browser-specific driver i.e.: IEDriver.dll (IE), webdriver.xpi (Firefox) + WebDriver API
Complexities of Moving to Selenium v2 Your tests have to be rewritten to leverage the WebDriver API.  Record/playback less useful option? (Selenium IDE plug-in for Firefox) Synchronization issues: implement more implicit/explicit wait conditions (Selenium v2 sometimes acts like an impatient user)  Hidden/non-visible elements can no longer be clicked. Specific WebDriverextension for each browser. Cross-browser issues with mouse click/keyboard events. CSS3 selectors now more dependent on the browser (unlike Selenium v1). Not all WebDriver extensions are fully baked (i.e. Chrome, Android, iPhone) Keeping up with the release cycles. Release Candidates: toggle()/select() removed from API. We do a lot of pip –U selenium.  Make sure you’re using the latest version of your preferred language binding! Documentation is sparse, and hard to debug without digging through Selenium source code (Java, C++, and JavaScript).
Visibility Matters i.e. driver.find_element_by_id(“cms_toolbar_icon”).click() The X/Y coordinates of the element location are used to determine where to click. Hidden elements can no longer be acted upon until they are visible. The element gets focused and clicked.  Some quirky issues with elements at top or bottom of the screen exist. CSS z-index takes precedence now; the top-most element will be the one that receives the mouse event.    If you use any type of debug overlay tool (i.eDjango Debug Toolbar, Rails Footnotes, etc.) disable them before running your Selenium tests!
Using Cookies In the Django Debug Toolbar case, we can set a cookie called ‘djdt’ to disable the overlay. ,[object Object]
Contrary to the documentation, setting cookies actually requires passing in a dictionary of name, value, and secure parameters.driver.add_cookie({"name" : "djdt",                           "value" : "true",                           "path" : "/",                           "secure" : False}) (name, value, secure parameters required) ,[object Object],[object Object]
Demo So how does this implicit/explicit wait stuff work? Let’s play Hearsay Social Says...http://hearsaysocialsays.appspot.com (Selenium v2 source code posted on the site) def play_level(): driver.find_element_by_name("b").click() WebDriverWait(driver, timeout=10).until(lambda driver: driver.find_element_by_name("s").get_attribute("value") == "Player's  Turn") pcclicks = driver.execute_script("return pcclicks;")     for pcclick in pcclicks[1:]: ele = "pl%s" % pcclick driver.find_element_by_name(ele).click() driver.find_element_by_name("b").click()     # Alert box shows up.  Let's dismiss it. driver.switch_to_alert()     Alert(driver).accept() for i in xrange(20): play_level()
Native vs. Synthetic Events Selenium v1 relied entirely on generating events through JavaScript, while Selenium v2 tries to do it through the operating system. Selecting a dropdown: driver.find_element_by_xpath("//select[@id=‘myselect']/option[text()=‘Seattle']").select()  (deprecated) driver.find_elements_by_css_selector("#myselect option")[2].click()  # IE7/IE8 won’t click (JS issue) from selenium.webdriver.common.keys import Keys driver.find_element_by_css_selector("#myselect").send_keys(Keys.DOWN) (IE7/IE8 have different behavior for disabled elements) One workaround: driver.execute_script(“$(‘#myselect option’][2].change()’);”)  (use jQuery to trigger select-box changes) You can always bypass some cross-browser issues related to native events by reverting to JavaScript-based events, though it’s not ideal. <select id=“myselect”>   <option value="1">Seattle</option>                                                                                                                                                                                       <option value="2“ disabled=disabled>Boston</option>                                                                                                                                                                                              <option value=”3”>San Francisco</option>   <option value=“4">Washington D.C.</option>                                                                                                                                                                                   </select>
Hover states, drag-and-drop, motion-based gestures, HTML5…. Want more complex sequences of keyboard/mouse actions (i.e. right clicks, double clicks, drag/drop)?   Use the ActionChains class. Creating hover states: also done through ActionChains class.  Remember, the elements still have to be visible for them to be chained! Many advanced user interactions still somewhat experimental, so expect issues. from selenium.webdriver import ActionChains driver.get(‘http://www.espn.com’) menu_mlb= driver.find_element_by_id("menu-mlb") chain = ActionChains(driver) chain.move_to_element(menu_mlb).perform() chain.move_to_element(menu_mlb).click(scores).perform() (scores is not visible until MLB is selected) scores = driver.find_elements_by_css_selector("#menu-mlb div.mod-content ul li")[1]  scores.click()
[object Object],div:contains(“Click here”)vs. //div[text()=“Click here”) Matching by inner text?  You still may need to use XPath. CSS selectors supported in Selenium v1 are not standard (i.e. contains()) Selenium v2 relies on document.querySelector() for modern browsers (IE8+, Firefox 3.5+).   If document.querySelector() isn’t supported, the Sizzle CSS engine is used. Even if you’re using a CSS3 selector, check whether it’s supported in IE. driver.find_element_by_css_selector(“#ad-summary:last-child") (breaks in IE7) driver.find_element_by_css_selector(“#ad-summary.last") (workaround: explicitly define the  last element when  rendering the HTML) CSS Selectors in Selenium v2
Other Tips & Tricks… Use Firebug with Selenium v2. Create a profile and installing the extension: firefox -ProfileManager --no-remote  (launch profile manager and install Firebug extension) Specify profile directory: 	profile = FirefoxProfile(profile_directory=“/home/user/.mozilla/firefox/60f7of9x.selenium”) driver = webdriver.Firefox(firefox_profile=profile) Test on local browsers first, use SSH reverse tunneling when testing on remote devservers: Install Selenium server on host machine: java –jar selenium-server.jar (default port 4444) Create a SSH tunnel into remote machine:  ssh-nNT -R 9999:<IP address of server>:4444 username@myhost.com(clients connect to port 9999) Login to remote machine and connect via webdriver.Remote() driver = webdriver.Remote(command_executor=http://localhost:9999/wd/hub) Using SauceLabs?   Make sure your max-duration: option is set if your test runs exceed 30 mins.    Can’t keep up with the Selenium v2 release cycles?  Fix your version with selenium-version: option. Use exit signals handlers to issue driver.quit() commands to see your test results sooner.
Summary Selenium v2 gets closer to simulating the user experience with an entirely new architecture (WebDriver API + browser plug-in/extension). Your tests may start failing on clicking on hidden/non-visible elements, so disable your debug overlays and be aware of CSS z-index issues. Bugs/issues with generating events still persist, and you may encounter many browser quirks (i.e. dropdown boxes). WebDriver may run faster, though you may need to add more synchronization checkpoints with implicit/explicit waits. When using CSS selectors, use the ones supported across all browsers (especially IE).

Contenu connexe

Tendances

What I’ve learned when developing BlockAlertViews
What I’ve learned when developing BlockAlertViewsWhat I’ve learned when developing BlockAlertViews
What I’ve learned when developing BlockAlertViews
Gustavo Ambrozio
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentials
Mark Rackley
 

Tendances (20)

jQuery Presentasion
jQuery PresentasionjQuery Presentasion
jQuery Presentasion
 
Javascript event handler
Javascript event handlerJavascript event handler
Javascript event handler
 
Intro to jQuery
Intro to jQueryIntro to jQuery
Intro to jQuery
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
A comprehensive guide on developing responsive and common react filter component
A comprehensive guide on developing responsive and common react filter componentA comprehensive guide on developing responsive and common react filter component
A comprehensive guide on developing responsive and common react filter component
 
Error found
Error foundError found
Error found
 
Migration to jQuery 3.5.x
Migration to jQuery 3.5.xMigration to jQuery 3.5.x
Migration to jQuery 3.5.x
 
Android the Agile way
Android the Agile wayAndroid the Agile way
Android the Agile way
 
Dominando o Data Binding no Android
Dominando o Data Binding no AndroidDominando o Data Binding no Android
Dominando o Data Binding no Android
 
Business News, Personal Finance and Money News
Business News, Personal Finance and Money NewsBusiness News, Personal Finance and Money News
Business News, Personal Finance and Money News
 
Muster in Webcontrollern
Muster in WebcontrollernMuster in Webcontrollern
Muster in Webcontrollern
 
What I’ve learned when developing BlockAlertViews
What I’ve learned when developing BlockAlertViewsWhat I’ve learned when developing BlockAlertViews
What I’ve learned when developing BlockAlertViews
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
 
Html events with javascript
Html events with javascriptHtml events with javascript
Html events with javascript
 
Javascript dom event
Javascript dom eventJavascript dom event
Javascript dom event
 
Web Development Introduction to jQuery
Web Development Introduction to jQueryWeb Development Introduction to jQuery
Web Development Introduction to jQuery
 
Jquery ui
Jquery uiJquery ui
Jquery ui
 
Intro to jQuery
Intro to jQueryIntro to jQuery
Intro to jQuery
 
French kit2019
French kit2019French kit2019
French kit2019
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentials
 

En vedette

Bristol Cycle Festival
Bristol Cycle FestivalBristol Cycle Festival
Bristol Cycle Festival
Melanie Peck
 
Indian Horses Before Columbus Evidences in America
Indian Horses Before Columbus Evidences in AmericaIndian Horses Before Columbus Evidences in America
Indian Horses Before Columbus Evidences in America
Ruben LLumihucci
 
Personalized Learning at Your Fingertips: Building a PLN
Personalized Learning at Your Fingertips: Building a PLNPersonalized Learning at Your Fingertips: Building a PLN
Personalized Learning at Your Fingertips: Building a PLN
Torrey Trust
 
Lorenc gordani winter outlook report 201415 and summer review 2014
Lorenc gordani   winter outlook report 201415 and summer review 2014Lorenc gordani   winter outlook report 201415 and summer review 2014
Lorenc gordani winter outlook report 201415 and summer review 2014
Lorenc Gordani
 
Thoughts On Patent Damages Landscape Post-Halo - Law360
Thoughts On Patent Damages Landscape Post-Halo - Law360Thoughts On Patent Damages Landscape Post-Halo - Law360
Thoughts On Patent Damages Landscape Post-Halo - Law360
Matthew Harrison
 
Albanian Res by Dr Lorenc Gordani - Slides
Albanian Res by Dr Lorenc Gordani - SlidesAlbanian Res by Dr Lorenc Gordani - Slides
Albanian Res by Dr Lorenc Gordani - Slides
Lorenc Gordani
 
роль русского языка, литературы, истории и обществознания в современном обще...
роль русского языка, литературы, истории и обществознания  в современном обще...роль русского языка, литературы, истории и обществознания  в современном обще...
роль русского языка, литературы, истории и обществознания в современном обще...
Alexander Denisov
 
CP_Pres_2.0_-_Generic
CP_Pres_2.0_-_GenericCP_Pres_2.0_-_Generic
CP_Pres_2.0_-_Generic
alroche
 

En vedette (20)

Bristol Cycle Festival
Bristol Cycle FestivalBristol Cycle Festival
Bristol Cycle Festival
 
Activitats tema 1
Activitats tema 1Activitats tema 1
Activitats tema 1
 
Gay archipelago-bahasa-indonesia
Gay archipelago-bahasa-indonesiaGay archipelago-bahasa-indonesia
Gay archipelago-bahasa-indonesia
 
North American BioFortean Review - Yuri Kuchinsky
North American BioFortean Review - Yuri KuchinskyNorth American BioFortean Review - Yuri Kuchinsky
North American BioFortean Review - Yuri Kuchinsky
 
36 quatro-níveis-de-avaliação-de-treinamento
36 quatro-níveis-de-avaliação-de-treinamento36 quatro-níveis-de-avaliação-de-treinamento
36 quatro-níveis-de-avaliação-de-treinamento
 
Indian Horses Before Columbus Evidences in America
Indian Horses Before Columbus Evidences in AmericaIndian Horses Before Columbus Evidences in America
Indian Horses Before Columbus Evidences in America
 
Personalized Learning at Your Fingertips: Building a PLN
Personalized Learning at Your Fingertips: Building a PLNPersonalized Learning at Your Fingertips: Building a PLN
Personalized Learning at Your Fingertips: Building a PLN
 
Lorenc gordani winter outlook report 201415 and summer review 2014
Lorenc gordani   winter outlook report 201415 and summer review 2014Lorenc gordani   winter outlook report 201415 and summer review 2014
Lorenc gordani winter outlook report 201415 and summer review 2014
 
Nb preparation pdf_c1slot
Nb preparation pdf_c1slotNb preparation pdf_c1slot
Nb preparation pdf_c1slot
 
Thoughts On Patent Damages Landscape Post-Halo - Law360
Thoughts On Patent Damages Landscape Post-Halo - Law360Thoughts On Patent Damages Landscape Post-Halo - Law360
Thoughts On Patent Damages Landscape Post-Halo - Law360
 
Albanian Res by Dr Lorenc Gordani - Slides
Albanian Res by Dr Lorenc Gordani - SlidesAlbanian Res by Dr Lorenc Gordani - Slides
Albanian Res by Dr Lorenc Gordani - Slides
 
Tablet School ImparaDigitale
Tablet School ImparaDigitaleTablet School ImparaDigitale
Tablet School ImparaDigitale
 
Photoshop
PhotoshopPhotoshop
Photoshop
 
Sem 7 conteo de figuras
Sem 7   conteo de figurasSem 7   conteo de figuras
Sem 7 conteo de figuras
 
Pro presentationass2
Pro presentationass2Pro presentationass2
Pro presentationass2
 
Интернет-агентство "видОК" - Seo-оптимизация для сайтов
Интернет-агентство "видОК" - Seo-оптимизация для сайтовИнтернет-агентство "видОК" - Seo-оптимизация для сайтов
Интернет-агентство "видОК" - Seo-оптимизация для сайтов
 
роль русского языка, литературы, истории и обществознания в современном обще...
роль русского языка, литературы, истории и обществознания  в современном обще...роль русского языка, литературы, истории и обществознания  в современном обще...
роль русского языка, литературы, истории и обществознания в современном обще...
 
EMID Superintendents Report to School Board Working Session
EMID Superintendents Report to School Board Working SessionEMID Superintendents Report to School Board Working Session
EMID Superintendents Report to School Board Working Session
 
CP_Pres_2.0_-_Generic
CP_Pres_2.0_-_GenericCP_Pres_2.0_-_Generic
CP_Pres_2.0_-_Generic
 
104
104104
104
 

Similaire à Lessons Learned: Migrating Tests to Selenium v2

Composite Applications with WPF and PRISM
Composite Applications with WPF and PRISMComposite Applications with WPF and PRISM
Composite Applications with WPF and PRISM
Eyal Vardi
 
Open social 2.0 sandbox ee and breaking out of the gadget box
Open social 2.0 sandbox  ee and breaking out of the gadget boxOpen social 2.0 sandbox  ee and breaking out of the gadget box
Open social 2.0 sandbox ee and breaking out of the gadget box
Ryan Baxter
 

Similaire à Lessons Learned: Migrating Tests to Selenium v2 (20)

jQuery Mobile
jQuery MobilejQuery Mobile
jQuery Mobile
 
jQuery
jQueryjQuery
jQuery
 
JavaScript & Dom Manipulation
JavaScript & Dom ManipulationJavaScript & Dom Manipulation
JavaScript & Dom Manipulation
 
Frontin like-a-backer
Frontin like-a-backerFrontin like-a-backer
Frontin like-a-backer
 
What's new and exciting with JSF 2.0
What's new and exciting with JSF 2.0What's new and exciting with JSF 2.0
What's new and exciting with JSF 2.0
 
JavaScript and DOM Pattern Implementation
JavaScript and DOM Pattern ImplementationJavaScript and DOM Pattern Implementation
JavaScript and DOM Pattern Implementation
 
Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2
 
Developing and testing ajax components
Developing and testing ajax componentsDeveloping and testing ajax components
Developing and testing ajax components
 
Composite Applications with WPF and PRISM
Composite Applications with WPF and PRISMComposite Applications with WPF and PRISM
Composite Applications with WPF and PRISM
 
jQuery for Sharepoint Dev
jQuery for Sharepoint DevjQuery for Sharepoint Dev
jQuery for Sharepoint Dev
 
J query
J queryJ query
J query
 
jQuery
jQueryjQuery
jQuery
 
J query training
J query trainingJ query training
J query training
 
Jquery
JqueryJquery
Jquery
 
Jsfsunum
JsfsunumJsfsunum
Jsfsunum
 
Will your code blend? : Toronto Code Camp 2010 : Barry Gervin
Will your code blend? : Toronto Code Camp 2010 : Barry GervinWill your code blend? : Toronto Code Camp 2010 : Barry Gervin
Will your code blend? : Toronto Code Camp 2010 : Barry Gervin
 
jQuery
jQueryjQuery
jQuery
 
Open social 2.0 sandbox ee and breaking out of the gadget box
Open social 2.0 sandbox  ee and breaking out of the gadget boxOpen social 2.0 sandbox  ee and breaking out of the gadget box
Open social 2.0 sandbox ee and breaking out of the gadget box
 
Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2
 
Jquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript BasicsJquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript Basics
 

Dernier

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Dernier (20)

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
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...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 

Lessons Learned: Migrating Tests to Selenium v2

  • 1. Lessons Learned: Migrating Tests To Selenium v2 September 20, 2011 Roger Hu (rhu@hearsaycorp.com)
  • 2.
  • 3. Enables reps to compliantly capitalize on LinkedIn, Twitter, and Facebook
  • 4. Backed by Sequoia, NEA, Steve Chen, FB execs
  • 5.
  • 6. Reasons to Switch Selenium v2 more closely approximates the user experience. Internet Explorer (IE7/IE8) especially runs faster with Selenium v2 (> 20%?) Easier to write tests. WebDriver reflects how other JavaScript frameworks work.
  • 7. Selenium v2 Approach Example: driver = webdriver.Firefox() driver.find_element_by_xpath(“//a[text()=‘Create New Ad’”).click() driver.find_element_by_id(“ads_headline”).send_keys(“Selenium Testers Wanted”) Selenium server launches without needing proxy-based approach. Browser driver generates native keyboard/mouse clicks to more closely simulate user behavior. WebDriver API (REST-based) simpler. Browser-specific driver i.e.: IEDriver.dll (IE), webdriver.xpi (Firefox) + WebDriver API
  • 8. Complexities of Moving to Selenium v2 Your tests have to be rewritten to leverage the WebDriver API. Record/playback less useful option? (Selenium IDE plug-in for Firefox) Synchronization issues: implement more implicit/explicit wait conditions (Selenium v2 sometimes acts like an impatient user) Hidden/non-visible elements can no longer be clicked. Specific WebDriverextension for each browser. Cross-browser issues with mouse click/keyboard events. CSS3 selectors now more dependent on the browser (unlike Selenium v1). Not all WebDriver extensions are fully baked (i.e. Chrome, Android, iPhone) Keeping up with the release cycles. Release Candidates: toggle()/select() removed from API. We do a lot of pip –U selenium. Make sure you’re using the latest version of your preferred language binding! Documentation is sparse, and hard to debug without digging through Selenium source code (Java, C++, and JavaScript).
  • 9. Visibility Matters i.e. driver.find_element_by_id(“cms_toolbar_icon”).click() The X/Y coordinates of the element location are used to determine where to click. Hidden elements can no longer be acted upon until they are visible. The element gets focused and clicked. Some quirky issues with elements at top or bottom of the screen exist. CSS z-index takes precedence now; the top-most element will be the one that receives the mouse event. If you use any type of debug overlay tool (i.eDjango Debug Toolbar, Rails Footnotes, etc.) disable them before running your Selenium tests!
  • 10.
  • 11.
  • 12. Demo So how does this implicit/explicit wait stuff work? Let’s play Hearsay Social Says...http://hearsaysocialsays.appspot.com (Selenium v2 source code posted on the site) def play_level(): driver.find_element_by_name("b").click() WebDriverWait(driver, timeout=10).until(lambda driver: driver.find_element_by_name("s").get_attribute("value") == "Player's Turn") pcclicks = driver.execute_script("return pcclicks;") for pcclick in pcclicks[1:]: ele = "pl%s" % pcclick driver.find_element_by_name(ele).click() driver.find_element_by_name("b").click() # Alert box shows up. Let's dismiss it. driver.switch_to_alert() Alert(driver).accept() for i in xrange(20): play_level()
  • 13. Native vs. Synthetic Events Selenium v1 relied entirely on generating events through JavaScript, while Selenium v2 tries to do it through the operating system. Selecting a dropdown: driver.find_element_by_xpath("//select[@id=‘myselect']/option[text()=‘Seattle']").select() (deprecated) driver.find_elements_by_css_selector("#myselect option")[2].click() # IE7/IE8 won’t click (JS issue) from selenium.webdriver.common.keys import Keys driver.find_element_by_css_selector("#myselect").send_keys(Keys.DOWN) (IE7/IE8 have different behavior for disabled elements) One workaround: driver.execute_script(“$(‘#myselect option’][2].change()’);”) (use jQuery to trigger select-box changes) You can always bypass some cross-browser issues related to native events by reverting to JavaScript-based events, though it’s not ideal. <select id=“myselect”> <option value="1">Seattle</option> <option value="2“ disabled=disabled>Boston</option> <option value=”3”>San Francisco</option> <option value=“4">Washington D.C.</option> </select>
  • 14. Hover states, drag-and-drop, motion-based gestures, HTML5…. Want more complex sequences of keyboard/mouse actions (i.e. right clicks, double clicks, drag/drop)? Use the ActionChains class. Creating hover states: also done through ActionChains class. Remember, the elements still have to be visible for them to be chained! Many advanced user interactions still somewhat experimental, so expect issues. from selenium.webdriver import ActionChains driver.get(‘http://www.espn.com’) menu_mlb= driver.find_element_by_id("menu-mlb") chain = ActionChains(driver) chain.move_to_element(menu_mlb).perform() chain.move_to_element(menu_mlb).click(scores).perform() (scores is not visible until MLB is selected) scores = driver.find_elements_by_css_selector("#menu-mlb div.mod-content ul li")[1] scores.click()
  • 15.
  • 16. Other Tips & Tricks… Use Firebug with Selenium v2. Create a profile and installing the extension: firefox -ProfileManager --no-remote (launch profile manager and install Firebug extension) Specify profile directory: profile = FirefoxProfile(profile_directory=“/home/user/.mozilla/firefox/60f7of9x.selenium”) driver = webdriver.Firefox(firefox_profile=profile) Test on local browsers first, use SSH reverse tunneling when testing on remote devservers: Install Selenium server on host machine: java –jar selenium-server.jar (default port 4444) Create a SSH tunnel into remote machine: ssh-nNT -R 9999:<IP address of server>:4444 username@myhost.com(clients connect to port 9999) Login to remote machine and connect via webdriver.Remote() driver = webdriver.Remote(command_executor=http://localhost:9999/wd/hub) Using SauceLabs? Make sure your max-duration: option is set if your test runs exceed 30 mins. Can’t keep up with the Selenium v2 release cycles? Fix your version with selenium-version: option. Use exit signals handlers to issue driver.quit() commands to see your test results sooner.
  • 17. Summary Selenium v2 gets closer to simulating the user experience with an entirely new architecture (WebDriver API + browser plug-in/extension). Your tests may start failing on clicking on hidden/non-visible elements, so disable your debug overlays and be aware of CSS z-index issues. Bugs/issues with generating events still persist, and you may encounter many browser quirks (i.e. dropdown boxes). WebDriver may run faster, though you may need to add more synchronization checkpoints with implicit/explicit waits. When using CSS selectors, use the ones supported across all browsers (especially IE).
  • 18. Q/A