黄瓜中的跨浏览器测试

Cross browser testing in cucumber

我想 运行 在三种不同的浏览器中并行处理一个功能文件。 如何创建三个不同的 webdriver 实例? 并请添加如何对两个不同的功能文件执行相同的操作?

P.S。我正在用 java.

研究黄瓜

我会选择执行三次构建。我会为每次执行设置一个环境变量来决定使用哪个浏览器。

为了运行他们并行,我会写一个shell脚本来设置环境变量并启动三个执行。

当您提到 "three different browsers in parallel" 时,您的意思是像 Chrome、Firefox 和 Explorer 运行并行 还是 仅 Chrome 的三个不同实例 .

如果是第二种情况参考这篇文章-https://opencredo.com/running-cucumber-jvm-tests-in-parallel/。这背后的基本逻辑是根据所需的并行实例数分叉到单独的 JVM 中。这是使用 Maven surefire 插件完成的。

如果是第一个情况,那么您将需要修改某些方面。该插件将 'fork number' 传递给 JVM,您可以使用它来实例化该 JVM 的特定浏览器驱动程序。

我正在使用 Java 8, junit 4.12, picocontainer for Dependency Injection, Maven 3(由于 'fork number' 传递 null,因此不适用于较低版本),selenium 2.53(如果驱动程序需要,您需要找出 Selenium 3 的代码更改创建)和浏览器 Chrome and Firefox(您需要为 IE 添加代码)。

代码

  1. 文章 github 对 ShareDriver.java 的更改 - 用这个覆盖静态块并添加其他方法。
static {
      instantiateDriver();        
        Runtime.getRuntime().addShutdownHook(CLOSE_THREAD);
}

private static void instantiateDriver() {

      //numFork will be passed in the maven command line or eclipse 
      //--- clean install -DnumFork=${surefire.forkNumber}
      int browserType = Integer.parseInt(System.getProperty("numFork"));

      System.out.println("BROWSER TYPE "+browserType);

      if(browserType == 1)
          instantiateChromeDriver();

      else if (browserType == 2)
          instantiateFirefoxDriver();

      else if (browserType == 3) {    
          instantiateIEDriver();
      }       

  }

  private static void instantiateIEDriver() {
      //Implement this
  }

  private static void instantiateFirefoxDriver() {

      REAL_DRIVER = new FirefoxDriver();
      REAL_DRIVER.manage().window().maximize();   
  }

  private static void instantiateChromeDriver() {

      System.setProperty("webdriver.chrome.driver", "location of chromedriver.exe");
      ChromeOptions chop =  new ChromeOptions();
      chop.addArguments("test-type");
      chop.addArguments("start-maximized");
      chop.addArguments("--disable-extensions");

      REAL_DRIVER = new ChromeDriver(chop);
  }
  1. feature files 的更改 - 删除标签。更改其中一个功能文件以包含一些其他步骤。在步骤定义中编​​写新步骤 class.

  2. runner classes 的更改 - 从 cucumberoptions 中删除标签选项,您可能需要添加胶水选项以指向您的步骤定义 class。所以实际上 运行ner classes 是相同的。如果需要,您可以删除 运行ner classes 之一。其他测试将在每个浏览器中重复两次。

  3. pom.xml - 确保定义的分叉数量 (<surefire.fork.count>5</surefire.fork.count>) 多于您使用的浏览器数量。 否则逻辑会失败。

运行 in Maven -- 您可以使用命令 [=19= 从 eclipse 插件 运行 ] 在目标选项中。或者从命令行使用 mvn clean install -DnumFork=${surefire.forkNumber}.

这应该运行所有浏览器实例中所有功能文件中的所有场景。您可以将标签和功能等黄瓜选项细化为运行 具体场景或功能文件。