If expression within a thread

Hi,

I am using Watir and Autoit (win32 test tool)

Here is my code

  autoit = WIN32OLE.new("AutoItX3.Control")
  t = Thread.new(autoit) {
  if autoit.WinWait("Authentication Required", "", 5) ==

1
autoit.Send(username)
autoit.Send("{TAB}")
autoit.Send(password)
autoit.Send("{ENTER}")
end
}
m = Thread.new(self) {self.goto(url)}
m.join; t.join

When a user navigates to a url, an authentication dialog may appear.

If this appears I would like to enter a username and password

If I manually type the url and run this

 require 'win32ole'
 autoit = WIN32OLE.new("AutoItX3.Control")
 autoit.WinWait("Authentication Required", "", 5)

A success of 1 is returned.

I wonder if I can use if expressions in Ruby threads, as the if
block is never executed. Maybe the winwait function in autoit is not
able to thread.

Any ideas, please?

Thanks

Aidy

Calls to windows API’s will block all threads in Ruby. This is why
Watir’s
click_no_wait method spawns a process and not merely a thread.

Bret

Bret,

On Aug 11, 3:35 pm, Bret P. [email protected] wrote:

[Note: parts of this message were removed to make it a legal post.]

Calls to windows API’s will block all threads in Ruby. This is why Watir’s
click_no_wait method spawns a process and not merely a thread.

Bret

Thanks for getting back

  <code>
  autoit = WIN32OLE.new("AutoItX3.Control")
  m = Thread.new(self) {self.goto(url)}
  t = Thread.new(autoit) do
    sleep 3
    autoit.Send(username)
    autoit.Send("{TAB}")
    autoit.Send(password)
    autoit.Send("{ENTER}")
  end
  m.join; t.join
 </code>

The ‘goto’ method waits for the page to load.

If winole blocks threads in Ruby then the autoit thread would not get
executed as there is an indefinite wait in the ‘goto’ method.

Aidy

Bret,

On Aug 12, 12:13 pm, aidy [email protected] wrote:

On Aug 11, 3:35 pm, Bret P. [email protected] wrote:

[Note: parts of this message were removed to make it a legal post.]

Calls to windows API’s will block all threads in Ruby. This is why Watir’s
click_no_wait method spawns a process and not merely a thread.

Bret

Sorry for cross posting but I spawned this thread on Watir general as
well

Hi,

autoit = WIN32OLE.new("AutoItX3.Control") Thread.new(autoit) do sleep 1 autoit.WinWait("Authentication Required", "") autoit.Send(username) autoit.Send("{TAB}") autoit.Send(password) autoit.Send("{ENTER}") end self.goto(url)

I think autoit.WinWait executes faster than browser.goto => a hang. We
need a sleep even if it is only for 0.1 secs

I don’t think we need to explicitly create another thread for
self.goto as it is already in one.

Aidy

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs