[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

if expression within a thread

aidy

8/11/2008 11:37:00 AM

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
3 Answers

Bret Pettichord

8/11/2008 2:35:00 PM

0

[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

On Mon, Aug 11, 2008 at 6:37 AM, aidy <aidy.lewis@googlemail.com> wrote:

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


--
Bret Pettichord
CTO, WatirCraft LLC, http://www.wati...
Lead Developer, Watir, http://wtr.rub...
Blog (Essays), http://www.io.com/~...
MiniBlog (Links), http://feeds.feedburner.com/br...

aidy

8/12/2008 11:13:00 AM

0

Bret,

On Aug 11, 3:35 pm, Bret Pettichord <b...@pettichord.com> 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

aidy

8/12/2008 12:44:00 PM

0

Bret,

On Aug 12, 12:13 pm, aidy <aidy.le...@googlemail.com> wrote:
>
> On Aug 11, 3:35 pm, Bret Pettichord <b...@pettichord.com> 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,

<code>
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)
<code>

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