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.

Reply via email to