我正在使用Java和TestNG框架为我的公司编写一些selenium自动UI测试。我正在类中定义驱动程序Base,并且我想在中实际初始化驱动程序@BeforeTest并在@AfterTest方法中退出它。假设它们在不同的类中,Java的实现方式是什么?我知道如何使它在同一个类中工作,但不能在单独的类中工作。这是我的Base.java文件:
Base
@BeforeTest
@AfterTest
Base.java
public class Base { public static WebDriver driver = null; public WebDriver getDriver() { driver = new ChromeDriver(); return driver; } }
现在,我想拥有一个单独的Setup类和一个Teardown类。如果我要用相同的方式定义所有这些,@Test则可以这样进行:
@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关键字:
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。输出:
ParticularTest.java
I am in setUp method. I am in testMethod. I am in tearDown method.