繁体   English   中英

如何使用@BeforeSuite批注使用Selenium + TestNG运行多个浏览器会话(并行执行)

[英]How to run multiple browser sessions (parallel execution) with Selenium + TestNG using @BeforeSuite annotation

我可以在没有 @BeforeSuite批注的情况下运行多个Chrome浏览器会话,但是有时我需要在@BeforeClass@BeforeTest之前分配一些变量或在@BeforeSuite执行某些@BeforeTest ,同时我需要并行启动多个浏览器会话。 我怎样才能做到这一点 ?

这是我的代码的简化示例,其中我使用@BeforeSuite分配了一些变量,然后从TestNG.xml调用了2个并行测试。 它只会调用1个测试(而不是2个)。

但是,如果我不使用@BeforeSuite ,它将运行得很好(2个测试将并行运行)。

是否可以运行并行测试,同时仍使用@BeforeSuite 有时我们确实需要在某些测试场景中使用@BeforeSuite并调用多个浏览器会话。

谢谢。

public class MyClass {
  String baseURL;
  String browser;

  @BeforeSuite
  private void setTheVariables() {
    //Some codes here
    //Some codes here
    this.browser = "chrome";
  }


  @BeforeClass
  private void myBeforeClass() {
    //Some codes here
    //Some codes here
  }


  @BeforeTest
  private void myBeforeClass() {
    //Some codes here
    //Some codes here
  }


  @Test
  @Parameters("baseURL")
  public void f(String baseURL) {

    if (this.browser == "chrome") {
      System.setProperty("webdriver.chrome.driver", "C:\\\\Selenium\\\\chromedriver.exe");
      DesiredCapabilities caps = DesiredCapabilities.chrome();
      LoggingPreferences logPrefs = new LoggingPreferences();
      logPrefs.enable(LogType.BROWSER, Level.ALL);
      caps.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
      WebDriver driver = new ChromeDriver(caps);
      System.out.println("I am going to " + baseURL);
      driver.get(baseURL);
    }
  }
}

这是我的testNG.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="TestSuite" parallel="tests" thread-count="2">



  <test name="Test1" preserve-order="true">
    <parameter name="baseURL" value="http://www.amazon.com" />

    <classes>
      <class name="package.myClass" />
    </classes>
  </test>



  <test name="Test2" preserve-order="true">
    <parameter name="baseURL" value="http://www.google.com" />

    <classes>
      <class name="package.myClass" />
    </classes>

  </test>



</suite>

在presuite注释的方法在testNG XML之前运行。 因此,您必须在此顺序下方使用另一个注释,即BeforeClass注释,以在Java类中设置浏览器类型。 在您的testNG xml中添加一个名为browser的参数,以传递浏览器的类型。 这将使并行执行成为可能。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="TestSuite" parallel="tests" thread-count="2">
  <test name="Test1" preserve-order="true">
    <parameter name="baseURL" value="http://www.amazon.com" />
    <parameter name="browser" value="chrome">
    <classes>
      <class name="package.myClass" />
    </classes>
  </test>
  <test name="Test2" preserve-order="true">
    <parameter name="baseURL" value="http://www.google.com" />
    <parameter name="browser" value="firefox">
    <classes>
      <class name="package.myClass" />
    </classes>
  </test>
</suite>

您可以在.xml文件中通过浏览器值传递,而不是在Java类文件中传递它,并且可以通过.java文件处理执行。

例:
<parameter name="myBrowser" value="firefox"/> <parameter name="myBrowser" value="chrome"/>并且它可以在Suite / Class / Test / Method之前的首选位置实现

@Parameters("parameter name")
@BeforeTest 
public void xyz(String myBrowser) throws MalformedURLException {
    if (myBrowser.equalsIgnoreCase("chrome")) {
        System.setProperty("webdriver.chrome.driver", driverpathofchrome);
        driver = new ChromeDriver();
    } else if (myBrowser.equals("firefox")) {
        System.setProperty("webdriver.gecko.driver", driverpathoffirefox);
        driver = new FirefoxDriver();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM