Testing Blog

My Selenium Tests Aren't Stable!

Tuesday, June 02, 2009
Share on Twitter Share on Facebook
Google
Labels: Simon Stewart

20 comments :

  1. Marius GedminasJune 2, 2009 at 6:59:00 AM PDT

    I have seen a Selenium test suite (for a very AJAXy application) that had random unexplainable nondeterministic failures. Actions like "wait for element with id=foobar to appear" and then the immediate next action "click on element with id=foobar" would suddenly say it couldn't find the element any more---but only sometimes and not always.

    People spent hours trying to find the root cause, without any luck.

    ReplyDelete
    Replies
    1. KrillatronNovember 21, 2014 at 5:01:00 AM PST

      With this type of error, particularly with an ajaxy application, you want to use 'wait for element to be clickable' rather than 'wait for element to appear'

      Delete
      Replies
        Reply
    2. Reply
  2. V. Narayan RamanJune 2, 2009 at 7:57:00 AM PDT

    You missed XPath brittleness when UI changes with each dev build.

    ReplyDelete
    Replies
    1. UnknownJanuary 5, 2017 at 7:38:00 AM PST

      How do I ensure that with each DEV build, though my XPath changes, I can successfully run my tests?

      Do you have any solution ?

      Delete
      Replies
        Reply
    2. Reply
  3. Eric JainJune 2, 2009 at 8:48:00 PM PDT

    "It's very seldom because you're uncovered a bug in the test framework."

    That may be so, but browsing through their list of bugs turns up no small amount of unresolved "flakyness" issues.

    Selenium is a great tool, but it's ironic that one of my testing tools should be the buggiest of all the dev tools I use...

    ReplyDelete
    Replies
      Reply
  4. JaggaJune 2, 2009 at 10:18:00 PM PDT

    While re-factoring automation for my project, i found that adhering to good practices resolves most of automation issues:

    1. XPath:
    If IDs are available, use the same. Else, instead of relying on XPath constructed using HTML elements:

    static final String DISPLAY_NAME = "//div[@id='body']/div[4]/div[1]/div/div[1]/h4";
    static final String EMAIL_ADDRESS = "//html/body/div/div/div/div/span";

    The following is more stable to minor changes in GUI:

    static final String DISPLAY_NAME = “//div[@id='body']//div[@class='innerleft']/h4”;
    static final String EMAIL_ADDRESS = "//div[@id='global-info']/span";

    Use @class, text(), contains etc, to create stabler Ids.

    2. Instead of flaky, I prefer to use the “maintainability”. Sometimes, the debug information is less or confusing that does not let us to the actual issue quickly.

    Ex:

    20:04:58.539 INFO - Command request: isElementPresent[//a[text()='Remove image'], ] on session ece3c0c368e74594ab788751e13cea96


    If the command fails identifying the element (timeout) , there is no clue regarding which page the above element belongs to.

    Along with this, I suggest that we can have a high level log as below:

    [UI Flow] Is Element Present >> EditProfilePage.RemoveImageLink

    20:04:58.539 INFO - Command request: isElementPresent[//a[text()='Remove image'], ] on session ece3c0c368e74594ab788751e13cea96

    3. There is always a temptation to add 'sleep(...)' in the code to get the automation running locally. I suggest any test code with sleep should not be allowed to be checked-in. Instead use 'waitForElementsToLoad(...);' to wait for actual element to be loaded before continuing with the automation.

    Another practice which I found cleaner and also resolved issues is to keep the test scenario code away from the logic of waiting for a GUI element to load. This needs to be handled within the abstraction of the page itself.

    Ex:
    (1)
    public void clickBloggerBuzz() {
    click(Ui.BUZZ_LINK);
    // Add the waitForElementsToLoad() here
    }

    (2) Page constructors by default should wait for key element to be loaded before it returns.

    public DashboardPage(Selenium selenium) throws MalformedURLException {
    super(selenium);
    waitForElementsToLoad(Ui.EDIT_PHOTO_LINK);
    }

    ReplyDelete
    Replies
      Reply
  5. UnknownJune 3, 2009 at 6:24:00 AM PDT

    I love Selenium!

    Wish I could get my head around this BDD though :(

    ReplyDelete
    Replies
      Reply
  6. Lindsay KayJune 3, 2009 at 5:29:00 PM PDT

    I wrote an article on how we’ve been testing an ExtJS UI in Java at:

    http://www.xeolabs.com/portal/articles/selenium-and-extjs

    Primarily, it describes how we got around having to assign hand-crafted IDs to all the Ext components (taking care of the fragile XPath problem V. Narayan Raman mentioned) and how we synchronise the tests with AJAX.

    hope it helps somebody,
    Lindsay

    ReplyDelete
    Replies
      Reply
  7. Jean-Charles MeyrignacJune 22, 2009 at 6:04:00 AM PDT

    I work with Selenium since at least 3 years, and I have to admit it is quite buggy, forcing me to submit patches from time to time.

    One of the problems of Selenium is that bugs are fixed very slowly, even when you submit a patch.

    Another problem is that the code is not checked with an automated tool, like JsLint.

    The most annoying problem is that Selenium randomly detects the loading of iframes.
    As Marius, I have a test suite that works fine on 2 computers, but fails on 2 others, and all computers are quite different.
    I'm still searching for the bug after having already spent a lot of time on it...
    I also found some problems related to Firefox, like the fact that retrieving window.document.body generates an exception sometimes !

    ReplyDelete
    Replies
      Reply
  8. UnknownSeptember 18, 2010 at 8:01:00 AM PDT

    Great post Simon. I think you hit the nail on the head. I will add to the list of poor test isolation with a few (fairly obvious) examples:

    a) sharing data between tests
    b) running tests without proper cleanup
    c) running tests in parallel where current actions in one test might create unexpected outcomes in another

    ReplyDelete
    Replies
      Reply
  9. Larry PortDecember 6, 2010 at 12:16:00 PM PST

    Writer is glossing over how buggy and unstable Selenium can be, especially for an automated build environment. As another commentor stated, simple calls to access elements will succeed one time but fail others.

    ReplyDelete
    Replies
    1. Ken SmithFebruary 17, 2016 at 1:54:00 PM PST

      Amen. I've run into any number of scenarios where the Selenium webdriver just ... stops. Everything looks fine, the browser is doing what it's supposed to be doing, but Selenium has somehow stopped interacting with the test runner. Running the whole thing again, the test that failed last time will work this time, but some other test will fail (or maybe, the whole batch will pass). Maybe it's my code, but I've never been able to isolate it. (And yeah, I'm following all the best practices he describes.)

      Delete
      Replies
        Reply
    2. Reply
  10. XunSeptember 26, 2011 at 11:38:00 AM PDT

    As another commentor stated, simple calls to access elements will succeed one time but fail others.


    Cannot agree more! Selenium creates more problems, produces more false alerts that I have to deal with than the actual coding.

    ReplyDelete
    Replies
      Reply
  11. Chidambaram SubramanianAugust 9, 2012 at 11:01:00 PM PDT

    Great Post.
    At the beginning of reading this post I had hope that I will find some suggestion/feedback/solution which will make my test suite stable.
    But still I’m finding myself in same point as I was before reading this post.

    I agree with jcmeyrignac and Eric Jain comment.

    Here is one of the latest bug from selenium guys: http://code.google.com/p/chromedriver/issues/detail?id=121, this clearly shows that there is no backward compatibility check before releasing selenium version.

    If things don’t get stable, I guess soon there will be another open source testing tool to compete with selenium.

    ReplyDelete
    Replies
      Reply
  12. GalacticCoderJune 11, 2013 at 8:37:00 AM PDT

    I agree with Marius Gedminas, Larry Port, & Xun. My primary cause of flakiness is waitForElement (or similar wait) succeeding and then the following action I take on the element fails to locate the element, even if I try to assure it is present & visible.

    ReplyDelete
    Replies
    1. UnknownDecember 20, 2017 at 11:34:00 AM PST

      Did you ever find a solution to this?

      Delete
      Replies
        Reply
    2. Reply
  13. YaacovSeptember 10, 2013 at 5:52:00 AM PDT

    Same here, I can run a test and it fails to find element, yet it really finds it and test succeeds at the end, yet always has those failures.

    Is there anyway to tell selenium to ignore those failures, when running as a htmlsuite?

    ReplyDelete
    Replies
    1. UnknownDecember 20, 2017 at 11:35:00 AM PST

      Did you by chance find a solution to this, we are experiencing something similar and just cannot resolve...

      Delete
      Replies
        Reply
    2. Reply
  14. UnknownMay 13, 2015 at 5:56:00 AM PDT

    Same problem facing here too... Many test fails when we ran in jenkins but almost all test passes when we ran locally, No idea why it happens like that..

    ReplyDelete
    Replies
      Reply
  15. AJITHJuly 13, 2016 at 6:28:00 PM PDT

    Hi All,

    I am facing an issue while running selenium java code using webdriver. I tried in both linux and windows and both is throwing the same error. I tried to browse the solution in internet but most of the suggestion was to upgrade the selenium files. I am using the latest version of selenium and firefox. Below is the error am facing.Please help me resolve the issue.

    org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
    Firefox.","creator":"Canonical Ltd.","homepageURL":null},{"locales":["sv-SE"],"name":"Ubuntu Modifications","description":"Ubuntu-paket för Firefox.","creator":"Canonical Ltd.","homepageURL":null},{"locales"

    ReplyDelete
    Replies
      Reply
Add comment
Load more...

The comments you read and contribute here belong only to the person who posted them. We reserve the right to remove off-topic comments.

  

Labels


  • TotT 104
  • GTAC 61
  • James Whittaker 42
  • Misko Hevery 32
  • Code Health 31
  • Anthony Vallone 27
  • Patrick Copeland 23
  • Jobs 18
  • Andrew Trenk 13
  • C++ 11
  • Patrik Höglund 8
  • JavaScript 7
  • Allen Hutchison 6
  • George Pirocanac 6
  • Zhanyong Wan 6
  • Harry Robinson 5
  • Java 5
  • Julian Harty 5
  • Adam Bender 4
  • Alberto Savoia 4
  • Ben Yu 4
  • Erik Kuefler 4
  • Philip Zembrod 4
  • Shyam Seshadri 4
  • Chrome 3
  • Dillon Bly 3
  • John Thomas 3
  • Lesley Katzen 3
  • Marc Kaplan 3
  • Markus Clermont 3
  • Max Kanat-Alexander 3
  • Sonal Shah 3
  • APIs 2
  • Abhishek Arya 2
  • Alan Myrvold 2
  • Alek Icev 2
  • Android 2
  • April Fools 2
  • Chaitali Narla 2
  • Chris Lewis 2
  • Chrome OS 2
  • Diego Salas 2
  • Dori Reuveni 2
  • Jason Arbon 2
  • Jochen Wuttke 2
  • Kostya Serebryany 2
  • Marc Eaddy 2
  • Marko Ivanković 2
  • Mobile 2
  • Oliver Chang 2
  • Simon Stewart 2
  • Stefan Kennedy 2
  • Test Flakiness 2
  • Titus Winters 2
  • Tony Voellm 2
  • WebRTC 2
  • Yiming Sun 2
  • Yvette Nameth 2
  • Zuri Kemp 2
  • Aaron Jacobs 1
  • Adam Porter 1
  • Adam Raider 1
  • Adel Saoud 1
  • Alan Faulkner 1
  • Alex Eagle 1
  • Amy Fu 1
  • Anantha Keesara 1
  • Antoine Picard 1
  • App Engine 1
  • Ari Shamash 1
  • Arif Sukoco 1
  • Benjamin Pick 1
  • Bob Nystrom 1
  • Bruce Leban 1
  • Carlos Arguelles 1
  • Carlos Israel Ortiz García 1
  • Cathal Weakliam 1
  • Christopher Semturs 1
  • Clay Murphy 1
  • Dagang Wei 1
  • Dan Maksimovich 1
  • Dan Shi 1
  • Dan Willemsen 1
  • Dave Chen 1
  • Dave Gladfelter 1
  • David Bendory 1
  • David Mandelberg 1
  • Derek Snyder 1
  • Diego Cavalcanti 1
  • Dmitry Vyukov 1
  • Eduardo Bravo Ortiz 1
  • Ekaterina Kamenskaya 1
  • Elliott Karpilovsky 1
  • Elliotte Rusty Harold 1
  • Espresso 1
  • Felipe Sodré 1
  • Francois Aube 1
  • Gene Volovich 1
  • Google+ 1
  • Goran Petrovic 1
  • Goranka Bjedov 1
  • Hank Duan 1
  • Havard Rast Blok 1
  • Hongfei Ding 1
  • Jason Elbaum 1
  • Jason Huggins 1
  • Jay Han 1
  • Jeff Hoy 1
  • Jeff Listfield 1
  • Jessica Tomechak 1
  • Jim Reardon 1
  • Joe Allan Muharsky 1
  • Joel Hynoski 1
  • John Micco 1
  • John Penix 1
  • Jonathan Rockway 1
  • Jonathan Velasquez 1
  • Josh Armour 1
  • Julie Ralph 1
  • Kai Kent 1
  • Kanu Tewary 1
  • Karin Lundberg 1
  • Kaue Silveira 1
  • Kevin Bourrillion 1
  • Kevin Graney 1
  • Kirkland 1
  • Kurt Alfred Kluever 1
  • Manjusha Parvathaneni 1
  • Marek Kiszkis 1
  • Marius Latinis 1
  • Mark Ivey 1
  • Mark Manley 1
  • Mark Striebeck 1
  • Matt Lowrie 1
  • Meredith Whittaker 1
  • Michael Bachman 1
  • Michael Klepikov 1
  • Mike Aizatsky 1
  • Mike Wacker 1
  • Mona El Mahdy 1
  • Noel Yap 1
  • Palak Bansal 1
  • Patricia Legaspi 1
  • Per Jacobsson 1
  • Peter Arrenbrecht 1
  • Peter Spragins 1
  • Phil Norman 1
  • Phil Rollet 1
  • Pooja Gupta 1
  • Project Showcase 1
  • Radoslav Vasilev 1
  • Rajat Dewan 1
  • Rajat Jain 1
  • Rich Martin 1
  • Richard Bustamante 1
  • Roshan Sembacuttiaratchy 1
  • Ruslan Khamitov 1
  • Sam Lee 1
  • Sean Jordan 1
  • Sebastian Dörner 1
  • Sharon Zhou 1
  • Shiva Garg 1
  • Siddartha Janga 1
  • Simran Basi 1
  • Stan Chan 1
  • Stephen Ng 1
  • Tejas Shah 1
  • Test Analytics 1
  • Test Engineer 1
  • Tim Lyakhovetskiy 1
  • Tom O'Neill 1
  • Vojta Jína 1
  • automation 1
  • dead code 1
  • iOS 1
  • mutation testing 1


Archive


  • ►  2025 (1)
    • ►  Jan (1)
  • ►  2024 (13)
    • ►  Dec (1)
    • ►  Oct (1)
    • ►  Sep (1)
    • ►  Aug (1)
    • ►  Jul (1)
    • ►  May (3)
    • ►  Apr (3)
    • ►  Mar (1)
    • ►  Feb (1)
  • ►  2023 (14)
    • ►  Dec (2)
    • ►  Nov (2)
    • ►  Oct (5)
    • ►  Sep (3)
    • ►  Aug (1)
    • ►  Apr (1)
  • ►  2022 (2)
    • ►  Feb (2)
  • ►  2021 (3)
    • ►  Jun (1)
    • ►  Apr (1)
    • ►  Mar (1)
  • ►  2020 (8)
    • ►  Dec (2)
    • ►  Nov (1)
    • ►  Oct (1)
    • ►  Aug (2)
    • ►  Jul (1)
    • ►  May (1)
  • ►  2019 (4)
    • ►  Dec (1)
    • ►  Nov (1)
    • ►  Jul (1)
    • ►  Jan (1)
  • ►  2018 (7)
    • ►  Nov (1)
    • ►  Sep (1)
    • ►  Jul (1)
    • ►  Jun (2)
    • ►  May (1)
    • ►  Feb (1)
  • ►  2017 (17)
    • ►  Dec (1)
    • ►  Nov (1)
    • ►  Oct (1)
    • ►  Sep (1)
    • ►  Aug (1)
    • ►  Jul (2)
    • ►  Jun (2)
    • ►  May (3)
    • ►  Apr (2)
    • ►  Feb (1)
    • ►  Jan (2)
  • ►  2016 (15)
    • ►  Dec (1)
    • ►  Nov (2)
    • ►  Oct (1)
    • ►  Sep (2)
    • ►  Aug (1)
    • ►  Jun (2)
    • ►  May (3)
    • ►  Apr (1)
    • ►  Mar (1)
    • ►  Feb (1)
  • ►  2015 (14)
    • ►  Dec (1)
    • ►  Nov (1)
    • ►  Oct (2)
    • ►  Aug (1)
    • ►  Jun (1)
    • ►  May (2)
    • ►  Apr (2)
    • ►  Mar (1)
    • ►  Feb (1)
    • ►  Jan (2)
  • ►  2014 (24)
    • ►  Dec (2)
    • ►  Nov (1)
    • ►  Oct (2)
    • ►  Sep (2)
    • ►  Aug (2)
    • ►  Jul (3)
    • ►  Jun (3)
    • ►  May (2)
    • ►  Apr (2)
    • ►  Mar (2)
    • ►  Feb (1)
    • ►  Jan (2)
  • ►  2013 (16)
    • ►  Dec (1)
    • ►  Nov (1)
    • ►  Oct (1)
    • ►  Aug (2)
    • ►  Jul (1)
    • ►  Jun (2)
    • ►  May (2)
    • ►  Apr (2)
    • ►  Mar (2)
    • ►  Jan (2)
  • ►  2012 (11)
    • ►  Dec (1)
    • ►  Nov (2)
    • ►  Oct (3)
    • ►  Sep (1)
    • ►  Aug (4)
  • ►  2011 (39)
    • ►  Nov (2)
    • ►  Oct (5)
    • ►  Sep (2)
    • ►  Aug (4)
    • ►  Jul (2)
    • ►  Jun (5)
    • ►  May (4)
    • ►  Apr (3)
    • ►  Mar (4)
    • ►  Feb (5)
    • ►  Jan (3)
  • ►  2010 (37)
    • ►  Dec (3)
    • ►  Nov (3)
    • ►  Oct (4)
    • ►  Sep (8)
    • ►  Aug (3)
    • ►  Jul (3)
    • ►  Jun (2)
    • ►  May (2)
    • ►  Apr (3)
    • ►  Mar (3)
    • ►  Feb (2)
    • ►  Jan (1)
  • ▼  2009 (54)
    • ►  Dec (3)
    • ►  Nov (2)
    • ►  Oct (3)
    • ►  Sep (5)
    • ►  Aug (4)
    • ►  Jul (15)
    • ▼  Jun (8)
      • The plague of repetitiveness
      • The 7 Plagues of Software Testing
      • GTAC: Call for Proposals
      • Google Test Automation Conference 2009 - Zurich, S...
      • Burning Test Questions at Google
      • I'm a Googler now
      • James Whittaker joins Google
      • My Selenium Tests Aren't Stable!
    • ►  May (3)
    • ►  Apr (2)
    • ►  Feb (5)
    • ►  Jan (4)
  • ►  2008 (75)
    • ►  Dec (6)
    • ►  Nov (8)
    • ►  Oct (9)
    • ►  Sep (8)
    • ►  Aug (9)
    • ►  Jul (9)
    • ►  Jun (6)
    • ►  May (6)
    • ►  Apr (4)
    • ►  Mar (4)
    • ►  Feb (4)
    • ►  Jan (2)
  • ►  2007 (41)
    • ►  Oct (6)
    • ►  Sep (5)
    • ►  Aug (3)
    • ►  Jul (2)
    • ►  Jun (2)
    • ►  May (2)
    • ►  Apr (7)
    • ►  Mar (5)
    • ►  Feb (5)
    • ►  Jan (4)

Feed

  • Google
  • Privacy
  • Terms