0

I want to run same test on different browsers (Firefox, Chrome and Safari). To do this I am using parametrization in tests. Where in if browser is chrome run chrome and so on.

And in testng.xml I have specified to run tests in parallel and repeated same test in under several <test> tags.

What if I have so many tests to run. I will be copy pasting same test in <test> tags. Which doesn't see optimal solution.

How can I fix this?

Here is what I tried:

public class SameTestDifferentBrowsers {

WebDriver driver;

@BeforeMethod
@Parameters("browser")
public void openBroswer(String browser) {

    if (browser.equalsIgnoreCase("Chrome")) {
        System.out.println(System.getProperty("user.dir"));
        System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+"//lib//browsers//chromedriverMac");

        driver = new ChromeDriver();

    } else if (browser.equalsIgnoreCase("Firefox")) {
        driver = new FirefoxDriver();
    } else if (browser.equalsIgnoreCase("safari")) {
        System.setProperty("webdriver.safari.driver", System.getProperty("user.dir")+"//lib//browsers//SafariDriver.safariextz");
        driver = new SafariDriver();
    }
}

@AfterMethod
public void closeBrowser() {
    driver.quit();
}

@Test
public void login_TestCase() {
    driver.get("https://www.google.com");

}
}

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Parallel test suite" parallel="tests">
  <test name="Firefox Test">
  <parameter name="browser" value="browser"/>
    <classes>
      <class name="ParallelBrowser.SameTestDifferentBrowsers"/>
    </classes>
  </test>
  <test name="Chrome Test">
  <parameter name="browser" value="browser"/>
    <classes>
      <class name="ParallelBrowser.SameTestDifferentBrowsers"/>
    </classes>
  </test>
    <test name="Safari Test">
    <parameter name="browser" value="browser"/>
    <classes>
      <class name="ParallelBrowser.SameTestDifferentBrowsers"/>
    </classes>
  </test>
</suite>
paul
  • 4,333
  • 16
  • 71
  • 144

2 Answers2

0

If you are sure that you would want to run all the tests for all the three browsers then you may change your design a little.

Create multiple test classes for different test cases. In your xml test tags pass different test class names as parameters.

Write three @test methods in your parametrized test class each for each browser that accepts the class name as a parameter. Now using Reflections you can invoke the right test method in every @test method.

  • Can you please given an example? – paul Nov 17 '15 at 08:19
  • Also I think this is not a solution because why I would test every test in 3 browsers. And if I want to then why would I hardcode it in the code. – paul Nov 17 '15 at 08:57
0

Two things require fixing here and the problem sill be solved.

First: Update the TestNG.xml file to include the browser names

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Parallel test suite" parallel="tests">
<test name="Firefox Test">
    <parameter name="browser" value="Firefox" />
    <classes>
        <class name="ParallelBrowser.SameTestDifferentBrowsers" />
    </classes>
</test>
<test name="Chrome Test">
    <parameter name="browser" value="Chrome" />
    <classes>
        <class name="ParallelBrowser.SameTestDifferentBrowsers" />
    </classes>
</test>
<test name="Safari Test">
    <parameter name="browser" value="safari" />
    <classes>
        <class name="ParallelBrowser.SameTestDifferentBrowsers" />
    </classes>
</test>

Second: Safari browser extension should be installed and enabled in the browser and shouldn't be kept in the path.

So just comment following line from Java Code File

//System.setProperty("webdriver.safari.driver",      
       //System.getProperty("user.dir") + "/lib/browsers/SafariDriver.safariextz");
Being Zero
  • 26
  • 3