Why is Selenium WebDriver not locating objects on the page?

*Question posted on behalf of Connie Saign-Piche...* Hello, in working with Selenium WebDriver, sometimes it seems to have problems locating elements on the page with Chrome. I am running several testcases that need to interact with a piechart that renders and changes with each testcase. In some scenarios it works(selenium sees the elements, interacts and the tests pass) and in other scenarios it doesn't.. The code is pretty much the same. Not sure what the problem is other than perhaps the elements are being rendered differently and it's a timing issue. But I've tried Explicit waits and thread.sleep as well. So any suggestions would be appreciated. At this point I'm trying to work with the mouse to click on the page elements using coordinates but haven't quite figured out how to do that. If anyone has suggestions that'd be greatly appreciated.

Best Answer

  • Hi Mark, WLN Module & Feature Regression team has created a long list what you could call Selenium WebDriver extensions for both .NET and Java, which we could certainly share with you. Specifically for waiting for the page to load, we have a couple useful methods that are quite superior to explicit waits or Thread.Sleep calls. Maybe the method names aren't the best, but feel free to look over them and reach out to me if you want more info about our Selenium Utils or our Page Object Model in general. ///
    /// Waits up to the specified implicit wait for all forms of Javascript to finish executing /// ///
    The maximum number of milliseconds that Selenium should wait public void WaitForPageLoad(int timeoutInMilliseconds = TestWaitTimeInMillis) { try { const string javascript = "return document.readyState;"; new WebDriverWait(_driver, TimeSpan.FromMilliseconds(timeoutInMilliseconds)).Until( x => ((String)ExecuteScript(javascript)) == "complete"); } catch { // if we've timed out or hit an exception just return and we'll deal with the fallout on our next step } } ///
    /// Waits for jQuery to be inactive and any animation to be done /// ///
    length of time to wait for javascript public void WaitForJavascript(int timeoutInMilliseconds = TestWaitTimeInMillis) { try { const string javascript = "if(typeof jQuery == 'undefined') { return true; } else { return (jQuery.active == 0 && $(':animated').size() < 1); }"; new WebDriverWait(_driver, TimeSpan.FromMilliseconds(timeoutInMilliseconds)).Until( x => ((bool)ExecuteScript(javascript))); } catch { // if we've timed out or hit an exception just return and we'll deal with the fallout on our next step } }