Testing Blog

My Selenium Tests Aren't Stable!

tirsdag, juni 02, 2009
Share on Twitter Share on Facebook
Google
Etiketter: Simon Stewart

20 kommentarer :

  1. Marius Gedminas2. juni 2009 kl. 06.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.

    SvarSlet
    Svar
    1. Krillatron21. november 2014 kl. 05.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'

      Slet
      Svar
        Svar
    2. Svar
  2. V. Narayan Raman2. juni 2009 kl. 07.57.00 GMT-7

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

    SvarSlet
    Svar
    1. Unknown5. januar 2017 kl. 07.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 ?

      Slet
      Svar
        Svar
    2. Svar
  3. Eric Jain2. juni 2009 kl. 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...

    SvarSlet
    Svar
      Svar
  4. Anonym2. juni 2009 kl. 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);
    }

    SvarSlet
    Svar
      Svar
  5. Unknown3. juni 2009 kl. 06.24.00 GMT-7

    I love Selenium!

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

    SvarSlet
    Svar
      Svar
  6. Lindsay Kay3. juni 2009 kl. 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

    SvarSlet
    Svar
      Svar
  7. Jean-Charles Meyrignac22. juni 2009 kl. 06.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 !

    SvarSlet
    Svar
      Svar
  8. Unknown18. september 2010 kl. 08.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

    SvarSlet
    Svar
      Svar
  9. Larry Port6. december 2010 kl. 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.

    SvarSlet
    Svar
    1. Ken Smith17. februar 2016 kl. 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.)

      Slet
      Svar
        Svar
    2. Svar
  10. Xun26. september 2011 kl. 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.

    SvarSlet
    Svar
      Svar
  11. Chidambaram Subramanian9. august 2012 kl. 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.

    SvarSlet
    Svar
      Svar
  12. GalacticCoder11. juni 2013 kl. 08.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.

    SvarSlet
    Svar
    1. Unknown20. december 2017 kl. 11.34.00 GMT-8

      Did you ever find a solution to this?

      Slet
      Svar
        Svar
    2. Svar
  13. Yaacov10. september 2013 kl. 05.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?

    SvarSlet
    Svar
    1. Unknown20. december 2017 kl. 11.35.00 GMT-8

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

      Slet
      Svar
        Svar
    2. Svar
  14. Unknown13. maj 2015 kl. 05.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..

    SvarSlet
    Svar
      Svar
  15. AJITH13. juli 2016 kl. 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"

    SvarSlet
    Svar
      Svar
Tilføj kommentar
Indlæs flere...

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 108
  • 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
  • Arham Jain 1
  • Ari Shamash 1
  • Arif Sukoco 1
  • Bartosz Papis 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
  • Kyle Freeman 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
  • Zhe Lu 1
  • automation 1
  • dead code 1
  • iOS 1
  • mutation testing 1


Archive


  • ►  2026 (2)
    • ►  mar. (2)
  • ►  2025 (3)
    • ►  okt. (1)
    • ►  sep. (1)
    • ►  jan. (1)
  • ►  2024 (13)
    • ►  dec. (1)
    • ►  okt. (1)
    • ►  sep. (1)
    • ►  aug. (1)
    • ►  jul. (1)
    • ►  maj (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)
    • ►  jun. (1)
    • ►  apr. (1)
    • ►  mar. (1)
  • ►  2020 (8)
    • ►  dec. (2)
    • ►  nov. (1)
    • ►  okt. (1)
    • ►  aug. (2)
    • ►  jul. (1)
    • ►  maj (1)
  • ►  2019 (4)
    • ►  dec. (1)
    • ►  nov. (1)
    • ►  jul. (1)
    • ►  jan. (1)
  • ►  2018 (7)
    • ►  nov. (1)
    • ►  sep. (1)
    • ►  jul. (1)
    • ►  jun. (2)
    • ►  maj (1)
    • ►  feb. (1)
  • ►  2017 (17)
    • ►  dec. (1)
    • ►  nov. (1)
    • ►  okt. (1)
    • ►  sep. (1)
    • ►  aug. (1)
    • ►  jul. (2)
    • ►  jun. (2)
    • ►  maj (3)
    • ►  apr. (2)
    • ►  feb. (1)
    • ►  jan. (2)
  • ►  2016 (15)
    • ►  dec. (1)
    • ►  nov. (2)
    • ►  okt. (1)
    • ►  sep. (2)
    • ►  aug. (1)
    • ►  jun. (2)
    • ►  maj (3)
    • ►  apr. (1)
    • ►  mar. (1)
    • ►  feb. (1)
  • ►  2015 (14)
    • ►  dec. (1)
    • ►  nov. (1)
    • ►  okt. (2)
    • ►  aug. (1)
    • ►  jun. (1)
    • ►  maj (2)
    • ►  apr. (2)
    • ►  mar. (1)
    • ►  feb. (1)
    • ►  jan. (2)
  • ►  2014 (24)
    • ►  dec. (2)
    • ►  nov. (1)
    • ►  okt. (2)
    • ►  sep. (2)
    • ►  aug. (2)
    • ►  jul. (3)
    • ►  jun. (3)
    • ►  maj (2)
    • ►  apr. (2)
    • ►  mar. (2)
    • ►  feb. (1)
    • ►  jan. (2)
  • ►  2013 (16)
    • ►  dec. (1)
    • ►  nov. (1)
    • ►  okt. (1)
    • ►  aug. (2)
    • ►  jul. (1)
    • ►  jun. (2)
    • ►  maj (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)
    • ►  jul. (2)
    • ►  jun. (5)
    • ►  maj (4)
    • ►  apr. (3)
    • ►  mar. (4)
    • ►  feb. (5)
    • ►  jan. (3)
  • ►  2010 (37)
    • ►  dec. (3)
    • ►  nov. (3)
    • ►  okt. (4)
    • ►  sep. (8)
    • ►  aug. (3)
    • ►  jul. (3)
    • ►  jun. (2)
    • ►  maj (2)
    • ►  apr. (3)
    • ►  mar. (3)
    • ►  feb. (2)
    • ►  jan. (1)
  • ▼  2009 (54)
    • ►  dec. (3)
    • ►  nov. (2)
    • ►  okt. (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!
    • ►  maj (3)
    • ►  apr. (2)
    • ►  feb. (5)
    • ►  jan. (4)
  • ►  2008 (75)
    • ►  dec. (6)
    • ►  nov. (8)
    • ►  okt. (9)
    • ►  sep. (8)
    • ►  aug. (9)
    • ►  jul. (9)
    • ►  jun. (6)
    • ►  maj (6)
    • ►  apr. (4)
    • ►  mar. (4)
    • ►  feb. (4)
    • ►  jan. (2)
  • ►  2007 (41)
    • ►  okt. (6)
    • ►  sep. (5)
    • ►  aug. (3)
    • ►  jul. (2)
    • ►  jun. (2)
    • ►  maj (2)
    • ►  apr. (7)
    • ►  mar. (5)
    • ►  feb. (5)
    • ►  jan. (4)

Feed

  • Google
  • Privacy
  • Terms