0
votes

Running two tests at once, how do I get the second test from closing the browser of the first test?

Pretty much like my questions states: I'm running two tests (e.g.: test1.rb, test2.rb) at once using basic watir.

I'm not running rake, watir-grid, selenium-grid, parallel_test, or rspec. Whichever test finishes first invokes browser.close, causing the remaining test to fail. The returned message from the failed test is browser window was closed. /var/lib/gems/2.3.0/gems/watir-6.1.0/lib/watir/browser.rb:312:in 'assert_exists'.

What am I doing wrong? I've tried giving different variable names to the browser assignment such as browser1, browser2, etc. I've even tried installing rake under Jenkins to use two different workspaces. Below are examples of my tests (actual code removed to protect company identity).

test1.rb

#!/usr/bin/ruby
require 'watir'
require 'headless'

def runTests
    # tests go here
end

begin
    puts "Running headless."
    headless = Headless.new
    headless.start

    puts "Running browser."
    browser = Watir::Browser.new(:chrome)
    browser.window.resize_to(1200, 1000)
    browser.driver.manage.timeouts.implicit_wait = 5

    runTests()
rescue => e
    puts ("#{e}. "+ e.backtrace.join("\n"))
ensure
    browser.close
    headless.destroy
end

test2.rb

#!/usr/bin/ruby
require 'watir'
require 'headless'
require 'CoreClass'

def runSecondFileTests()
    # second set of tests go here
    # might use @coreClass if needed
end

begin
    puts "Running headless."
    headless = Headless.new
    headless.start

    puts "Running browser."
    client = Selenium::WebDriver::Remote::Http::Default.new
    client.read_timeout = 600

    browser = Watir::Browser.new(:chrome, :http_client => client)
    browser.window.resize_to(1200, 1000)

    @coreClass       = CoreClass.new(browser)

    runSecondFileTests()
rescue => e
    puts ("#{e} "+e.backtrace.join("\n"))
ensure
    browser.close
    headless.destroy
end

Posts I've already read:

1

1 Answers

0
votes

The problem is actually in the headless setup. The first headless.destroy will force close all open browsers in the default display. You need to specify display or reuse parameters.