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
-~----------~----~----~----~------~----~------~--~---

Reply via email to