我正在使用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的含义在文档中进行了说明。