0

我想在不同的浏览器(Firefox、Chrome 和 Safari)上运行相同的测试。为此,我在测试中使用参数化。如果浏览器是 chrome,则在哪里运行 chrome 等等。

testng.xml我已经指定并行运行测试并在多个<test>标签下重复相同的测试。

如果我有这么多测试要运行怎么办。我将在<test>标签中复制粘贴相同的测试。哪个没有看到最佳解决方案。

我怎样才能解决这个问题?

这是我尝试过的:

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

2 回答 2

0

有两件事需要在这里解决,问题仍然可以解决。

首先:更新 TestNG.xml 文件以包含浏览器名称

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

第二:应在浏览器中安装并启用 Safari 浏览器扩展,不应将其保留在路径中。

所以只需从 Java 代码文件中注释以下行

//System.setProperty("webdriver.safari.driver",      
       //System.getProperty("user.dir") + "/lib/browsers/SafariDriver.safariextz");
于 2015-11-29T19:43:21.703 回答
0

如果您确定要为所有三种浏览器运行所有测试,那么您可以稍微更改您的设计。

为不同的测试用例创建多个测试类。在您xml test tags传递不同的测试类名称作为参数。

@test在参数化测试类中为每个接受类名作为参数的浏览器编写三个方法。现在使用Reflections您可以在每个方法中调用正确的测试@test方法。

于 2015-11-17T07:10:15.470 回答