Shane, Thanks for the excellent description of the problems that occur when your tests run in an account that doesn't have the rights Watir needs.
Bret On Sep 25, 11:54 am, Shane <[email protected]> wrote: > Some Background on architecture of the app is needed: > > Windows 2003/Apache-v2.2/IE7/Watir-v1.6.2/Ruby-v1.8.5 > > 1. Apache running under 'localsystem' account. > 2. Request to run a Watir script comes in. > 3. Apache CGI kicks off IE7 under a particular user, e.g. 'tester', > and attaches the IE7 window to the "default" desktop environment. This > allows us to VNC into the machine and see all IE7 windows from all the > accounts running. > 4. IE7 has ruby embedded into the process through plugin and > executes the ruby script in a thread. > > For clicking on links/buttons in IE, Watir supplies a synchronous > 'click' method and async 'click_no_wait' method. 'click_no_wait' > spawns a completely new ruby process to connect back to the IE7 window > to click the link/button. > > This is what is failing for me. Since click_no_wait is spawning a new > process. It cannot seem to see the IE7 window to connect to it and > click on the link/button. I have to use 'click_no_wait' due to a > dialog box that IE pops up on a certain page, so that another ruby > thread can close it. > > I've tried a few things: > - using fire_event('OnClick') instead of click_no_wait hangs script > like 'click' would. > - Modifying 'click' by commenting out '[email protected]', but the > 'click!' itself is the API that hangs waiting for the dialog box to > close. > - Make 'click_no_wait' spawn a new thread instead of a process', but > other threads appear to be suspended while the 'click!' call executes > in that thread. Which is strange. > - Executing the 'click_no_wait' process using the exact same code that > is used to spawn the IE7 process, but it still can't find any IE7 > windows. > > By 'default' desktop described above, the code that spawns IE > basically does a series of C++ calls to attach the IE7 window to the > 'winsta0' desktop: > > - LogonUser() // log in as tester account > - OpenWindowStation("winsta0") // to get default desktop > - SetProcessWindowStation() > - // add the user to interactive window station using > (GetUserObjectSecurity, GetSecurityDescriptorDacl, GetAclInformation, > AddAce, SetSecurityDescriptorDacl, SetUserObjectSecurity) > - // add user to "default" desktop using APIs listed above. > - CreateEnvironmentBlock > - ImpersonateLoggedOnUser > - CreateProcessAsUser('iexplore.exe') > - // cleanup > > Running the following Watir script under the particular user IE7 is > running under yields: > > $IE = Watir::IE.attach(:title, /Google/) > $IE.button(:name, 'btnG').click! > > c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.2/lib/watir/ie-class.rb: > 246:in `method_missing': Windows (WIN32OLERuntimeError) OLE error code: > 80040154 in HRESULT error code:0x80020009 Exception occurred. from c:/ > ruby/lib/ruby/gems/1.8/gems/watir-1.6.2/lib/watir/ie-class.rb:246:in > "each" > > Which contains: > > c:/ruby/lib/ruby/gems/1.8/gems/watir-1.6.2/lib/watir/ie-class.rb:246 > shell = WIN32OLE.new("Shell.Application") > windows = shell.Windows ## Fails here > > Let me know if I can supply more details or disambiguation! :) > > Thanks, Shane. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Watir General" group. To post to this group, send email to [email protected] Before posting, please read the following guidelines: http://wiki.openqa.org/display/WTR/Support To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/watir-general -~----------~----~----~----~------~----~------~--~---
