一尘不染

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

selenium

我正在使用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();
}

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


阅读 428

收藏
2020-06-26

共1个答案

一尘不染

使用继承。

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.
2020-06-26