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