[Wtr-development] [JIRA] Commented: (WTR-165) Watir's new wait logic doesn't always wait for all frames to load

Jarmo Pertman (JIRA) watirjira at gmail.com
Tue Oct 12 14:57:20 EDT 2010


    [ http://jira.openqa.org/browse/WTR-165?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=19912#action_19912 ] 

Jarmo Pertman commented on WTR-165:
-----------------------------------

Unfortunately the code provided by you is not reproducable since no-one else except you has this __doPostBack method with those arguments. If you could give some more abstract or general code with reproducible problem, then we could help.

Does it work fine with 1.6.5?

> Watir's new wait logic doesn't always wait for all frames to load
> -----------------------------------------------------------------
>
>                 Key: WTR-165
>                 URL: http://jira.openqa.org/browse/WTR-165
>             Project: Watir
>          Issue Type: Bug
>          Components: Frame, Wait
>    Affects Versions: 1.5.0/1.5.1
>         Environment: Win XP Pro
> IE 7
> Watir Gem 1.5.1.1166
> ruby 1.8.5.21
>            Reporter: David Brown
>             Fix For: Soon
>
>
> I've been using the development gem 1.5.1.1166 which includes the
> re-written wait logic to test a complex SAP web application.  The main
> content that I am automating is nested 4 frames deep.  Up until this
> past Friday this version of watir seemed to handle waiting for all of
> the inner frames to load properly.  Now however this wait logic isn't
> always waiting until the pages load completely which causes my scripts
> to fail.  I don't think there have been any changes in the web app I'm
> testing which would cause this. I did happen to install the
> important/critical Microsoft security patches for June which could have
> effected watir?
>  http://www.microsoft.com/technet/security/bulletin/ms07-jun.mspx
> Has any one else experienced this problem with the new wait logic not
> waiting quite long enough when there are many nested frames?
> I wish this was a public web-app so I could provide an example w/html to
> look at but it's not.
> > Gems prior to 1.5.1.1166 would either give me the access denied errors
> > as it tried to wait for the inner frames to load - or if those were
> > suppressed, I had to put in a manual wait whenever I navigated to a new
> > page:  "sleep 0.1 until some_element_on_inner_frame.exists?".  After
> > installing 1166 all of these delay problems were fixed... Until now.  
> >
> > Now that this issue has surfaced I'm forced to put the manual delays in
> > again. It is not a big deal to do this, but, it's always cleaner if
> > watir handles the delays properly.
> In order to help narrow down the issue i've included a test script below which adds some extra logging to the watir wait method, and provides an example of the output I get when running it against my application.
> ###############TEST SCRIPT ################
> require 'watir'
> module Watir
>   class IE
>     # Block execution until the page has loaded.
>     # =nodoc
>     # Note: This code needs to be prepared for the ie object to be closed at
>     # any moment!
>     def wait(no_sleep=false)
>       @rexmlDomobject = nil
>       @down_load_time = 0.0
>       a_moment = 0.2 # seconds
>       start_load_time = Time.now
>       begin
>         while @ie.busy # XXX need to add time out
>           sleep a_moment
>         end
>         until @ie.readyState == READYSTATE_COMPLETE do
>           sleep a_moment
>         end
>         sleep a_moment
>         until @ie.document do
>           sleep a_moment
>         end
>         docNum = 0
>         documents_to_wait_for = [@ie.document]
>       rescue WIN32OLERuntimeError # IE window must have been closed
>         @down_load_time = Time.now - start_load_time
>         sleep @defaultSleepTime unless no_sleep
>         return @down_load_time
>       end
>       while doc = documents_to_wait_for.shift
>         docNum +=1
>         begin
>           tsleep = Time.now
>           until doc.readyState == "complete" do
>             sleep a_moment
>           end
>           tsleep = Time.now - tsleep
>           puts "** waited #{tsleep} seconds for doc['#{docNum}'].readyState == 'complete'"
>           numFrames = doc.frames.length
>           @url_list << doc.url unless @url_list.include?(doc.url)
>           doc.frames.length.times do |n|
>             begin
>               documents_to_wait_for << doc.frames[n.to_s].document
>               puts "\t ** Adding Frame #{n+1} of #{numFrames} of document:'#{docNum}' as doc['#{docNum + n+1}']"
>             rescue WIN32OLERuntimeError
>               puts "\t ** WIN32OLERuntimeError Raised and Handled when Adding Frame #{n+1} of #{numFrames} of document:'#{docNum}' as doc['#{docNum + n+1}'] \n #{$!} \n\n"
>             end
>           end
>         rescue WIN32OLERuntimeError
>           puts "WIN32OLERuntimeError Raised and Handled when processing frames for doc['#{docNum}'] \n#{$!} \n #{$@.join("\n")} \n\n"
>         end
>       end
>       @down_load_time = Time.now - start_load_time
>       run_error_checks
>       sleep @defaultSleepTime unless no_sleep
>       @down_load_time
>     end
>   end
> end
> ie = Watir::IE.attach(:title,/SAP Netweaver/i)
> puts "\n\n\n ****** Going to Accounts Screen Now ********"
> ie.link(:text,'Accounts').click
> dtime = ie.down_load_time
> t = Time.now
> #wait until the content of the innner frame is realy done loading.
> sleep 0.1 until ie.frame(:name,/Desktop/).frame(:id,'isolatedWorkArea').frame(:name, 'crmA').frame(:name,/_B/).cell(:text,'Accounts').exists?
> t = Time.now - t
> puts "Navigated to Accounts: Watir waited:#{dtime} seconds - Inner Frame content wasn't available for another #{t} seconds"
> ########SCRIPT OUTPUT###############
> ****** Going to Accounts Screen Now ********
> ** waited 0.0 seconds for doc['1'].readyState == 'complete'
> 	 ** Adding Frame 1 of 3 of document:'1' as doc['2']
> 	 ** Adding Frame 2 of 3 of document:'1' as doc['3']
> 	 ** Adding Frame 3 of 3 of document:'1' as doc['4']
> ** waited 0.0 seconds for doc['2'].readyState == 'complete'
> ** waited 0.0 seconds for doc['3'].readyState == 'complete'
> ** waited 0.656 seconds for doc['4'].readyState == 'complete'
> 	 ** Adding Frame 1 of 2 of document:'4' as doc['5']
> 	 ** Adding Frame 2 of 2 of document:'4' as doc['6']
> ** waited 0.0 seconds for doc['5'].readyState == 'complete'
> ** waited 0.625 seconds for doc['6'].readyState == 'complete'
> 	 ** Adding Frame 1 of 1 of document:'6' as doc['7']
> ** waited 0.0 seconds for doc['7'].readyState == 'complete'
> 	 ** WIN32OLERuntimeError Raised and Handled when Adding Frame 1 of 2 of document:'7' as doc['8'] 
>  document
>     OLE error code:80070005 in <Unknown>
>       Access is denied.
>     HRESULT error code:0x80020009
>       Exception occurred. 
> 	 ** Adding Frame 2 of 2 of document:'7' as doc['9']
> WIN32OLERuntimeError Raised and Handled when processing frames for doc['8'] 
> unknown property or method `readyState'
>     HRESULT error code:0x80070005
>       Access is denied. 
>  test_wait.rb:38:in `method_missing'
> test_wait.rb:38:in `wait'
> c:/ruby/lib/ruby/gems/1.8/gems/watir-1.5.1.1166/./watir.rb:2574:in `click'
> test_wait.rb:69 
> Navigated to Accounts: Watir waited:6.936 seconds - Inner Frame content wasn't available for another 1.297 seconds
> ####################Frame info #################
> $ie.show_frames
> there are 3 frames
> frame  index: 1 name: sapPopupMainId_X0
> frame  index: 2 name: obnNavIFrame
> frame  index: 3 name: Desktop Innerpage
>  
> ie.frame(:index,3).show_frames
> there are 2 frames
> frame  index: 1 name: sapPopupMainId_X0
> frame  index: 2 name: isolatedWorkArea
> ie.frame(:index,3).frame(:index,2).show_frames
> there are 1 frames
> frame  index: 1 name: crmA
> ie.frame(:index,3).frame(:index,2).frame(:index,1).show_frames
> there are 2 frames
> frame  index: 1 Access Denied, see http://wiki.openqa.org/display/WTR/FAQ#access-denied
> frame  index: 2 name: 4678CFD23E1209F4E100000093225E68_B   #######  THIS IS THE FRAME THAT HAS THE CONTENT that watir isn't waiting for to load. #######

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.openqa.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the Wtr-development mailing list