I personally would probably use Watir::Wait.unitl and Watir::Wait.while as they give a bit more flexibility http://rdoc.info/gems/watir-webdriver/Watir/Wait
then you can give along with specific amounts of time a more meaningful error message. and don't need to be tied down to actual elements, as those blocks just need something to evaluate true On Mon, Aug 4, 2014 at 4:50 AM, Ragavan Ambighananthan < [email protected]> wrote: > Couple of ideas for reliable automation > > 1) watir-webdriver's certain APIs like goto, click waits for the whole > page to load (document.readyState == 0) but this definition does not > include ajax calls > all_ajax_calls_completed = browser.execute_script("return jQuery.active") > == 0, try if this helps before you interact with the table if you use > jQuery in your page > > 2) Ask your developers to create a div tag in the page once the page is > loaded or the table is loaded. This means you only have to poll on that div > tag before interacting with the table. This helps for very dynamic pages. > > 3) We are using a solution where our UI framework will set a tag to true > once all the html elements, include js are loaded, still this does not help > with Ajax so we follow 2 & 3 for making our automation reliable > > 4) Try passing 45 seconds to wait_until_present(45) to increase the > timeout and see if it helps. > Regards > Ragavan > > > > On Friday, August 1, 2014 11:12:36 PM UTC+1, Lakshya Kapoor wrote: >> >> The issue I am facing is some times the elements take longer than >> expected to appear on the page. Watir tries to interact with them before >> they load and fails. I am aware of wait_until_present and when_present >> methods, but they fail in the scenario I am working on. I have a table that >> auto-populates rows from the database, but occasionally it takes well over >> 10 seconds due to performance issues on server or client side. >> >> I want to extract text from the first row when it is present, but >> sometimes the row element passes my sleep_until_present test, but no text >> is extracted from the row. Here is my simple 2 step approach with >> sleep_until_present() method. >> >> 1. Wait until element is !nil. >> 2. Wait until element is present. >> >> def sleep_until_present(element_name) >> sleep_timer = 0 >> nil_timer = 0 >> found = nil >> >> while sleep_timer < 60 >> # Sleep 30s if element is nil >> while !element_name && nil_timer < 30 >> break if element_name != nil >> $log.info "Element is nil. Waiting..." >> sleep(1) >> nil_timer += 1 >> end >> >> if element_name.present? >> if element_name.locate # If located >> found = element_name.flash >> return true if found >> end >> end >> >> sleep(1) # sleep until element is present >> >> # Get last 100 chars which includes the element ID >> element_id = element_name.inspect[-95..-1] >> $log.info "(#{sleep_timer+1}) Waiting for -> #{element_id}" >> sleep_timer += 1 >> end >> >> return false >> end >> >> This may not be the best approach, but I am interested in learning how I >> can approach such situations in a better way. >> >> P.S. New to automated testing. Any constructive criticism is welcome! >> > -- > -- > Before posting, please read http://watir.com/support. In short: search > before you ask, be nice. > > [email protected] > http://groups.google.com/group/watir-general > [email protected] > > --- > You received this message because you are subscribed to the Google Groups > "Watir General" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- -- Before posting, please read http://watir.com/support. In short: search before you ask, be nice. [email protected] http://groups.google.com/group/watir-general [email protected] --- You received this message because you are subscribed to the Google Groups "Watir General" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
