Testing Blog

My Selenium Tests Aren't Stable!

martedì, giugno 02, 2009
Share on Twitter Share on Facebook
Google
Etichette: Simon Stewart

20 commenti :

  1. Marius Gedminas2 giugno 2009 alle ore 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.

    RispondiElimina
    Risposte
    1. Krillatron21 novembre 2014 alle ore 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'

      Elimina
      Risposte
        Rispondi
    2. Rispondi
  2. V. Narayan Raman2 giugno 2009 alle ore 07:57:00 GMT-7

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

    RispondiElimina
    Risposte
    1. Unknown5 gennaio 2017 alle ore 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 ?

      Elimina
      Risposte
        Rispondi
    2. Rispondi
  3. Eric Jain2 giugno 2009 alle ore 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...

    RispondiElimina
    Risposte
      Rispondi
  4. Anonimo2 giugno 2009 alle ore 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);
    }

    RispondiElimina
    Risposte
      Rispondi
  5. Unknown3 giugno 2009 alle ore 06:24:00 GMT-7

    I love Selenium!

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

    RispondiElimina
    Risposte
      Rispondi
  6. Lindsay Kay3 giugno 2009 alle ore 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

    RispondiElimina
    Risposte
      Rispondi
  7. Jean-Charles Meyrignac22 giugno 2009 alle ore 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 !

    RispondiElimina
    Risposte
      Rispondi
  8. Unknown18 settembre 2010 alle ore 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

    RispondiElimina
    Risposte
      Rispondi
  9. Larry Port6 dicembre 2010 alle ore 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.

    RispondiElimina
    Risposte
    1. Ken Smith17 febbraio 2016 alle ore 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.)

      Elimina
      Risposte
        Rispondi
    2. Rispondi
  10. Xun26 settembre 2011 alle ore 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.

    RispondiElimina
    Risposte
      Rispondi
  11. Chidambaram Subramanian9 agosto 2012 alle ore 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.

    RispondiElimina
    Risposte
      Rispondi
  12. GalacticCoder11 giugno 2013 alle ore 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.

    RispondiElimina
    Risposte
    1. Unknown20 dicembre 2017 alle ore 11:34:00 GMT-8

      Did you ever find a solution to this?

      Elimina
      Risposte
        Rispondi
    2. Rispondi
  13. Yaacov10 settembre 2013 alle ore 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?

    RispondiElimina
    Risposte
    1. Unknown20 dicembre 2017 alle ore 11:35:00 GMT-8

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

      Elimina
      Risposte
        Rispondi
    2. Rispondi
  14. Unknown13 maggio 2015 alle ore 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..

    RispondiElimina
    Risposte
      Rispondi
  15. AJITH13 luglio 2016 alle ore 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"

    RispondiElimina
    Risposte
      Rispondi
Aggiungi commento
Carica altro...

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 114
  • 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
  • Chris Kennelly 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
  • Nimit Khandelwal 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
  • Radion Khait 1
  • Radoslav Vasilev 1
  • Rahul Singal 1
  • Rajat Dewan 1
  • Rajat Jain 1
  • Rich Martin 1
  • Richard Bustamante 1
  • Roman Govsheev 1
  • Roshan Sembacuttiaratchy 1
  • Ruslan Khamitov 1
  • Saicharan Nimmala 1
  • Sam Lee 1
  • Sean Jordan 1
  • Sebastian Dörner 1
  • Shahar Roth 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 (8)
    • ►  ott (1)
    • ►  lug (1)
    • ►  giu (1)
    • ►  mag (2)
    • ►  apr (1)
    • ►  mar (2)
  • ►  2025 (3)
    • ►  ott (1)
    • ►  set (1)
    • ►  gen (1)
  • ►  2024 (13)
    • ►  dic (1)
    • ►  ott (1)
    • ►  set (1)
    • ►  ago (1)
    • ►  lug (1)
    • ►  mag (3)
    • ►  apr (3)
    • ►  mar (1)
    • ►  feb (1)
  • ►  2023 (14)
    • ►  dic (2)
    • ►  nov (2)
    • ►  ott (5)
    • ►  set (3)
    • ►  ago (1)
    • ►  apr (1)
  • ►  2022 (2)
    • ►  feb (2)
  • ►  2021 (3)
    • ►  giu (1)
    • ►  apr (1)
    • ►  mar (1)
  • ►  2020 (8)
    • ►  dic (2)
    • ►  nov (1)
    • ►  ott (1)
    • ►  ago (2)
    • ►  lug (1)
    • ►  mag (1)
  • ►  2019 (4)
    • ►  dic (1)
    • ►  nov (1)
    • ►  lug (1)
    • ►  gen (1)
  • ►  2018 (7)
    • ►  nov (1)
    • ►  set (1)
    • ►  lug (1)
    • ►  giu (2)
    • ►  mag (1)
    • ►  feb (1)
  • ►  2017 (17)
    • ►  dic (1)
    • ►  nov (1)
    • ►  ott (1)
    • ►  set (1)
    • ►  ago (1)
    • ►  lug (2)
    • ►  giu (2)
    • ►  mag (3)
    • ►  apr (2)
    • ►  feb (1)
    • ►  gen (2)
  • ►  2016 (15)
    • ►  dic (1)
    • ►  nov (2)
    • ►  ott (1)
    • ►  set (2)
    • ►  ago (1)
    • ►  giu (2)
    • ►  mag (3)
    • ►  apr (1)
    • ►  mar (1)
    • ►  feb (1)
  • ►  2015 (14)
    • ►  dic (1)
    • ►  nov (1)
    • ►  ott (2)
    • ►  ago (1)
    • ►  giu (1)
    • ►  mag (2)
    • ►  apr (2)
    • ►  mar (1)
    • ►  feb (1)
    • ►  gen (2)
  • ►  2014 (24)
    • ►  dic (2)
    • ►  nov (1)
    • ►  ott (2)
    • ►  set (2)
    • ►  ago (2)
    • ►  lug (3)
    • ►  giu (3)
    • ►  mag (2)
    • ►  apr (2)
    • ►  mar (2)
    • ►  feb (1)
    • ►  gen (2)
  • ►  2013 (16)
    • ►  dic (1)
    • ►  nov (1)
    • ►  ott (1)
    • ►  ago (2)
    • ►  lug (1)
    • ►  giu (2)
    • ►  mag (2)
    • ►  apr (2)
    • ►  mar (2)
    • ►  gen (2)
  • ►  2012 (11)
    • ►  dic (1)
    • ►  nov (2)
    • ►  ott (3)
    • ►  set (1)
    • ►  ago (4)
  • ►  2011 (39)
    • ►  nov (2)
    • ►  ott (5)
    • ►  set (2)
    • ►  ago (4)
    • ►  lug (2)
    • ►  giu (5)
    • ►  mag (4)
    • ►  apr (3)
    • ►  mar (4)
    • ►  feb (5)
    • ►  gen (3)
  • ►  2010 (37)
    • ►  dic (3)
    • ►  nov (3)
    • ►  ott (4)
    • ►  set (8)
    • ►  ago (3)
    • ►  lug (3)
    • ►  giu (2)
    • ►  mag (2)
    • ►  apr (3)
    • ►  mar (3)
    • ►  feb (2)
    • ►  gen (1)
  • ▼  2009 (54)
    • ►  dic (3)
    • ►  nov (2)
    • ►  ott (3)
    • ►  set (5)
    • ►  ago (4)
    • ►  lug (15)
    • ▼  giu (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!
    • ►  mag (3)
    • ►  apr (2)
    • ►  feb (5)
    • ►  gen (4)
  • ►  2008 (75)
    • ►  dic (6)
    • ►  nov (8)
    • ►  ott (9)
    • ►  set (8)
    • ►  ago (9)
    • ►  lug (9)
    • ►  giu (6)
    • ►  mag (6)
    • ►  apr (4)
    • ►  mar (4)
    • ►  feb (4)
    • ►  gen (2)
  • ►  2007 (41)
    • ►  ott (6)
    • ►  set (5)
    • ►  ago (3)
    • ►  lug (2)
    • ►  giu (2)
    • ►  mag (2)
    • ►  apr (7)
    • ►  mar (5)
    • ►  feb (5)
    • ►  gen (4)

Feed

  • Google
  • Privacy
  • Terms