当前位置: 首页 > 面试题库 >

跨单独的类访问@BeforeTest和@AfterClass(TestNG)中的变量?

邢骏
2023-03-14
问题内容

我正在使用Java和TestNG框架为我的公司编写一些selenium自动UI测试。我正在类中定义驱动程序Base,并且我想在中实际初始化驱动程序@BeforeTest并在@AfterTest方法中退出它。假设它们在不同的类中,Java的实现方式是什么?我知道如何使它在同一个类中工作,但不能在单独的类中工作。这是我的Base.java文件:

public class Base {

        public static WebDriver driver = null;
        public WebDriver getDriver() {
            driver = new ChromeDriver();
            return driver;
        }
}

现在,我想拥有一个单独的Setup类和一个Teardown类。如果我要用相同的方式定义所有这些,@Test则可以这样进行:

@Test
public void testOne() {

    Base b = new Base();
    WebDriver driver = b.getDriver();

    // Do test-y things here.

    driver.quit();
}

我该如何设置?尝试学习正确的方法来做到这一点,而不是一起砍东西。如果需要,我还可以提供更多信息。谢谢!


问题答案:

使用继承。

public class TestBase {

    protected WebDriver driver;

    @BeforeClass
    public void setUp(){
        System.out.println("I am in setUp method.");

        //WebDriver instantiation etc.
        System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--start-maximized", "--disable-cache");
        driver = new ChromeDriver(options);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }

    @AfterClass
    public void tearDown(){
        System.out.println("I am in tearDown method.");

        //You can clean up after tests.
        driver.close();
    }
}

然后可以使用继承。注意extends关键字:

public class ParticularTest extends TestBase {

   @Test
   public void testMethod() {
       System.out.println("I am in testMethod.");

       //Your driver from TestBase is accessible here.
       //Your assertions come here.
   }
}

稍后您可以执行ParticularTest.java。输出:

I am in setUp method.
I am in testMethod.
I am in tearDown method.


 类似资料:
  • 问题内容: 我们从TestNG官方文档中知道: 带注释的方法将在调用当前类中的第一个测试方法之前运行。 带注释的方法将在运行属于标签内部的类的任何测试方法之前运行。 上面的两个TestNG批注在功能上看起来都很相似。谁能解释这个独特的区别? 问题答案: SeleniumAbstractTest.class MyTestClass1.class MyTestClass2.class 如果您具有以下测

  • 我们从官方的TestNG文档中了解到: 在调用当前类中的第一个测试方法之前,将运行带注释的方法。 将在运行属于标记中的类的任何测试方法之前运行带注释的方法。

  • 我正在尝试使用testng.xml执行testcases。我已经将所有的测试运行类放在一个测试中。在执行时,我注意到第二类(仪表板类)的@beforeTest方法首先执行。我希望执行所有类的@beforeTest方法,以与testng.xml文件中的类相同的执行顺序执行。请看下面的图片。 对于我在提到的类中使用的所有@beforeTest和@beforeClass我都使用了waysrun=true

  • 问题内容: 我有两个变量,范围是: 现在,由于我的应用程序的大小开始增加,因此我决定将网站的每个模块放入其自己的程序包中,就像子目录一样: 我该如何解决从其他软件包访问和全局变量的问题?这是错误的做法吗?我有一种感觉。 在这种情况下,我怎么会在声明自己的命名空间功能,所以我没有发疯具有固定其名称和所有的时间。 问题答案: 大写的变量名导出为其他包访问,因此并会工作。但是,一般不建议使用子包进行名称

  • 我有两个文件,第一个是HTML文件,另一个是javascript文件。我试图做的是在javascript文件上定义一个变量并在Html端访问它。有可能吗?一个粗略的代码附在下面,但它不工作,我得到的favColor是没有定义的错误。提前道谢。 JS端 Html端

  • 问题内容: 我正在尝试使用@BeforeTest来使代码…在每次测试之前运行一次。 这是我的代码: “ BeforeTest”仅打印一次,而不打印两次。我究竟做错了什么? 问题答案: 使用@BeforeMethod,而不是@BeforeTest。 @BeforeTest的含义在文档中进行了说明。