Testing Blog

My Selenium Tests Aren't Stable!

utorok, júna 02, 2009
Share on Twitter Share on Facebook
Google
Menovky: Simon Stewart

20 komentárov :

  1. Marius Gedminas2. júna 2009 o 6:59:00 GMT-7

    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.

    OdpovedaťOdstrániť
    Odpovede
    1. Krillatron21. novembra 2014 o 5:01:00 GMT-8

      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'

      Odstrániť
      Odpovede
        Odpovedať
    2. Odpovedať
  2. V. Narayan Raman2. júna 2009 o 7:57:00 GMT-7

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

    OdpovedaťOdstrániť
    Odpovede
    1. Unknown5. januára 2017 o 7:38:00 GMT-8

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

      Do you have any solution ?

      Odstrániť
      Odpovede
        Odpovedať
    2. Odpovedať
  3. Eric Jain2. júna 2009 o 20:48:00 GMT-7

    "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...

    OdpovedaťOdstrániť
    Odpovede
      Odpovedať
  4. Jagga2. júna 2009 o 22:18:00 GMT-7

    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);
    }

    OdpovedaťOdstrániť
    Odpovede
      Odpovedať
  5. Unknown3. júna 2009 o 6:24:00 GMT-7

    I love Selenium!

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

    OdpovedaťOdstrániť
    Odpovede
      Odpovedať
  6. Lindsay Kay3. júna 2009 o 17:29:00 GMT-7

    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

    OdpovedaťOdstrániť
    Odpovede
      Odpovedať
  7. Jean-Charles Meyrignac22. júna 2009 o 6:04:00 GMT-7

    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 !

    OdpovedaťOdstrániť
    Odpovede
      Odpovedať
  8. Unknown18. septembra 2010 o 8:01:00 GMT-7

    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

    OdpovedaťOdstrániť
    Odpovede
      Odpovedať
  9. Larry Port6. decembra 2010 o 12:16:00 GMT-8

    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.

    OdpovedaťOdstrániť
    Odpovede
    1. Ken Smith17. februára 2016 o 13:54:00 GMT-8

      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.)

      Odstrániť
      Odpovede
        Odpovedať
    2. Odpovedať
  10. Xun26. septembra 2011 o 11:38:00 GMT-7

    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.

    OdpovedaťOdstrániť
    Odpovede
      Odpovedať
  11. Chidambaram Subramanian9. augusta 2012 o 23:01:00 GMT-7

    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.

    OdpovedaťOdstrániť
    Odpovede
      Odpovedať
  12. GalacticCoder11. júna 2013 o 8:37:00 GMT-7

    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.

    OdpovedaťOdstrániť
    Odpovede
    1. Unknown20. decembra 2017 o 11:34:00 GMT-8

      Did you ever find a solution to this?

      Odstrániť
      Odpovede
        Odpovedať
    2. Odpovedať
  13. Yaacov10. septembra 2013 o 5:52:00 GMT-7

    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?

    OdpovedaťOdstrániť
    Odpovede
    1. Unknown20. decembra 2017 o 11:35:00 GMT-8

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

      Odstrániť
      Odpovede
        Odpovedať
    2. Odpovedať
  14. Unknown13. mája 2015 o 5:56:00 GMT-7

    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..

    OdpovedaťOdstrániť
    Odpovede
      Odpovedať
  15. AJITH13. júla 2016 o 18:28:00 GMT-7

    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"

    OdpovedaťOdstrániť
    Odpovede
      Odpovedať
Pridať komentár
Načítať viac...

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)
    • ►  okt (1)
    • ►  sep (1)
    • ►  aug (1)
    • ►  júl (1)
    • ►  máj (3)
    • ►  apr (3)
    • ►  mar (1)
    • ►  feb (1)
  • ►  2023 (14)
    • ►  dec (2)
    • ►  nov (2)
    • ►  okt (5)
    • ►  sep (3)
    • ►  aug (1)
    • ►  apr (1)
  • ►  2022 (2)
    • ►  feb (2)
  • ►  2021 (3)
    • ►  jún (1)
    • ►  apr (1)
    • ►  mar (1)
  • ►  2020 (8)
    • ►  dec (2)
    • ►  nov (1)
    • ►  okt (1)
    • ►  aug (2)
    • ►  júl (1)
    • ►  máj (1)
  • ►  2019 (4)
    • ►  dec (1)
    • ►  nov (1)
    • ►  júl (1)
    • ►  jan (1)
  • ►  2018 (7)
    • ►  nov (1)
    • ►  sep (1)
    • ►  júl (1)
    • ►  jún (2)
    • ►  máj (1)
    • ►  feb (1)
  • ►  2017 (17)
    • ►  dec (1)
    • ►  nov (1)
    • ►  okt (1)
    • ►  sep (1)
    • ►  aug (1)
    • ►  júl (2)
    • ►  jún (2)
    • ►  máj (3)
    • ►  apr (2)
    • ►  feb (1)
    • ►  jan (2)
  • ►  2016 (15)
    • ►  dec (1)
    • ►  nov (2)
    • ►  okt (1)
    • ►  sep (2)
    • ►  aug (1)
    • ►  jún (2)
    • ►  máj (3)
    • ►  apr (1)
    • ►  mar (1)
    • ►  feb (1)
  • ►  2015 (14)
    • ►  dec (1)
    • ►  nov (1)
    • ►  okt (2)
    • ►  aug (1)
    • ►  jún (1)
    • ►  máj (2)
    • ►  apr (2)
    • ►  mar (1)
    • ►  feb (1)
    • ►  jan (2)
  • ►  2014 (24)
    • ►  dec (2)
    • ►  nov (1)
    • ►  okt (2)
    • ►  sep (2)
    • ►  aug (2)
    • ►  júl (3)
    • ►  jún (3)
    • ►  máj (2)
    • ►  apr (2)
    • ►  mar (2)
    • ►  feb (1)
    • ►  jan (2)
  • ►  2013 (16)
    • ►  dec (1)
    • ►  nov (1)
    • ►  okt (1)
    • ►  aug (2)
    • ►  júl (1)
    • ►  jún (2)
    • ►  máj (2)
    • ►  apr (2)
    • ►  mar (2)
    • ►  jan (2)
  • ►  2012 (11)
    • ►  dec (1)
    • ►  nov (2)
    • ►  okt (3)
    • ►  sep (1)
    • ►  aug (4)
  • ►  2011 (39)
    • ►  nov (2)
    • ►  okt (5)
    • ►  sep (2)
    • ►  aug (4)
    • ►  júl (2)
    • ►  jún (5)
    • ►  máj (4)
    • ►  apr (3)
    • ►  mar (4)
    • ►  feb (5)
    • ►  jan (3)
  • ►  2010 (37)
    • ►  dec (3)
    • ►  nov (3)
    • ►  okt (4)
    • ►  sep (8)
    • ►  aug (3)
    • ►  júl (3)
    • ►  jún (2)
    • ►  máj (2)
    • ►  apr (3)
    • ►  mar (3)
    • ►  feb (2)
    • ►  jan (1)
  • ▼  2009 (54)
    • ►  dec (3)
    • ►  nov (2)
    • ►  okt (3)
    • ►  sep (5)
    • ►  aug (4)
    • ►  júl (15)
    • ▼  jún (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!
    • ►  máj (3)
    • ►  apr (2)
    • ►  feb (5)
    • ►  jan (4)
  • ►  2008 (75)
    • ►  dec (6)
    • ►  nov (8)
    • ►  okt (9)
    • ►  sep (8)
    • ►  aug (9)
    • ►  júl (9)
    • ►  jún (6)
    • ►  máj (6)
    • ►  apr (4)
    • ►  mar (4)
    • ►  feb (4)
    • ►  jan (2)
  • ►  2007 (41)
    • ►  okt (6)
    • ►  sep (5)
    • ►  aug (3)
    • ►  júl (2)
    • ►  jún (2)
    • ►  máj (2)
    • ►  apr (7)
    • ►  mar (5)
    • ►  feb (5)
    • ►  jan (4)

Feed

  • Google
  • Privacy
  • Terms