You could use a Singleton or pass your browser object around as a parameter.

Aidy

2009/2/5 Justin Ko <[email protected]>:
>
> We are creating a smoke test for our web based application using the
> Test/Unit module in Ruby (v1.8.6) with Watir (v1.6.2).
>
> The smoke test would consist of a series of tests such as:
>
> Test 1: Open an IE browser and goto to the application's home page
> Test 2: Sign into the application
> Test 3: Test some feature that is accessible to the signed in user
> Test 4: Test some other feature that is accessible to the signed in
> user
>
> We would like to:
> 1) Use the same browser (Watir::IE object) throughout the entire
> series of tests and
> 2) Be able to run the smoke test multiple times concurrently.
>
> In trying to do this, we are running into problems with variable
> scope.
>
> When we assigned the Watir::IE object to an instance variable (@), the
> variable appeared to be destroyed during the teardown of each test.
> This prevents us from re-using the same browser across multiple tests.
>
> When we assigned the Watir::IE object to a class (@@) or global ($)
> variable, we could use the same browser throughout the series of
> tests.  However, when using multiple threads to run the smoke test
> multiple times concurrently, the threads collided due to everyone
> using the same browser.
>
> The below code illustrates our problem.
>
> If you run the code as it is, two browsers will be opened and all of
> the .goto() commands end up being performed on the last created
> browser (ie both threads are sharing one browser).  If you change the
> '@@browser' to '@browser', the test_open_browser test completes as
> expected (ie two browsers open and each navigates to a page).
> However, the browser is not retained from test to test, resulting in
> the test_navigate_somewhere_else test giving the following error:
>
> test_navigate_somewhere_else(TC_MyTest):
> NoMethodError: undefined method `goto' for nil:NilClass
>    caller.rb:16:in `test_navigate_somewhere_else'
>
>
> Question: Are there any ideas on how we can retain a variable (the
> browser) between tests, yet still be thread-safe?
>
> Thanks,
> Justin Ko
>
>
> Code:
>
> require 'watir'
> require 'watir/ie'
> require 'test/unit'
> require 'test/unit/ui/console/testrunner'
>
> class TC_MyTest < Test::Unit::TestCase
>  def test_open_browser
>    pages = ['www.google.ca', 'www.bestbuy.ca', 'www.futureshop.ca']
>    @@browser = Watir::IE.new
>    sleep(2+rand(10))
>    @@browser.goto( pages[rand(pages.length)] )
>  end
>
>  def test_navigate_somewhere_else
>    pages = ['www.henrys.com', 'www.gmail.com', 'maps.google.ca']
>    @@browser.goto( pages[rand(pages.length)] )
>  end
> end
>
> class TS_MyTests
>  def self.suite
>    suite = Test::Unit::TestSuite.new
>    suite << TC_MyTest.suite
>    return suite
>  end
> end
>
> threads = []
>
> 2.times do |x|
>  threads << Thread.new(x) { |myPage|
>    Test::Unit::UI::Console::TestRunner.run(TS_MyTests)
>  }
> end
> threads.each { |aThread|  aThread.join }
> >
>

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