【问题标题】:@BeforeTest @AfterTest running only once@BeforeTest @AfterTest 只运行一次
【发布时间】:2018-06-24 12:05:45
【问题描述】:

我正在使用 selenium-maven-cucumber-testng 进行 web whatsapp 自动化练习。我有以下问题。

预期:我有很多功能文件,我想依次运行所有功能文件,如下所示:

获取第一个功能文件 -> 打开浏览器 -> 运行功能文件中提到的步骤 -> 关闭浏览器。获取第二个功能文件 -> 打开浏览器 -> 运行功能文件中提到的步骤 -> 关闭浏览器等等。

结果:目前所有功能文件都在运行并通过。但是浏览器只打开一次,即,

打开浏览器 -> 运行功能文件 1、功能文件 2 等 -> 关闭浏览器。

我想按照“预期”中的说明运行。

我的测试: testng.xml

我的 RunnerClass :

Runner.java

我的钩子:

Hook.java

【问题讨论】:

  • 请在此处发布您的代码,而不是链接到图像 - 请使用编辑链接编辑您的问题。

标签: maven selenium cucumber testng


【解决方案1】:

BeforeTestAfterTest 将只运行一次,因为 testng.xml 中只有一个 test 块。一种方法是为每个功能文件创建单独的运行器并具有单独的 test 块。

<test name="Feature_File_1">
    <classes>
      <class name="Runner1"/>
    </classes>
  </test>

  <test name="Feature_File_2">
    <classes>
      <class name="Runner2"/>>
    </classes>
  </test>

同样在当前的runner类中移除junit注解@RunWith

【讨论】:

  • 我当然会这样做。另外,在我的整个代码中,我没有提到@Test。你能告诉我它是如何运行我的代码的吗?我可以看到@Test的唯一地方是在我的跑步者类扩展的AbstractTestNGCucumberTests中。
  • 查看 AbstractTestNG...... 类中的代码。它非常不言自明。它有一个数据提供者和其他好东西。它完成了所有繁重的工作。
  • @Grasshopper :我不认为,如果您必须为这个用例的每个测试使用 ,这是一个好习惯。
  • @cruisepandey 什么是被违反的良好做法?此外,不会为“每个”测试运行 beforetest 和 aftertest 配置方法,而只会为 xml 中的 块运行一次。
  • Grasshopper :在这种情况下,我们不能按照 OP 的意图使用 @beforeMethod 启动浏览器。他想为每个测试方法启动浏览器。
【解决方案2】:

您需要将您的 TestNG 挂钩更改为 Cucumber 挂钩。 这是为什么? 因为您想在您在问题中详细说明的每个场景之后关闭浏览器。

请看下面:

import cucumber.api.java.After;
import cucumber.api.java.Before;

public class Hooks {

@Before
public void beforeScenario(){
    System.out.println("This will run before the Scenario");
}   

@After
public void afterScenario(){
    System.out.println("This will run after the Scenario");
}
}

【讨论】:

  • 对不起.. 如果我之前把它设为@,它现在甚至都不会启动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 2017-10-17
  • 2013-11-13
  • 2017-01-24
  • 1970-01-01
相关资源
最近更新 更多