Java Selenium和TestNG在一个浏览器中进行所有测试
我有一个抽象类,其中初始化webdriver。所有实现了测试的类都是从他那里继承的。我想减少测试时间,为所有测试打开浏览器Java Selenium和TestNG在一个浏览器中进行所有测试,java,testing,selenium,selenium-webdriver,testng,Java,Testing,Selenium,Selenium Webdriver,Testng,我有一个抽象类,其中初始化webdriver。所有实现了测试的类都是从他那里继承的。我想减少测试时间,为所有测试打开浏览器 class AbstractClassCase { public static WebDriver driver; @BeforeClass @Parameters({"webDriver", "applicationHost", "applicationPort", "driverHost", "driverPort", "userna
class AbstractClassCase {
public static WebDriver driver;
@BeforeClass
@Parameters({"webDriver", "applicationHost", "applicationPort", "driverHost", "driverPort", "username", "password"})
public void setUp(
String webDriverIdentifier,
String applicationHost,
@Optional String applicationPort,
@Optional String driverHost,
@Optional String driverPort,
@Optional String username,
@Optional String password){
driver = new FirefoxDriver();
driver.get("localhost");
login(username, password)
}
@AfterСlass
public void tearDown() {
driver.quite();
}
}
public class TestButton extends AbstractClassCase {
@Test
public void testClickButtonNo() {
WebElement button = driver.findElement(By.id("button-no"));
button.click();
WebElement status = driver.findElement(By.id("button-status"));
Assert.assertEqual("Cancel", status.getText());
}
}
和其他考试班一样精神
如何重新配置该类,使浏览器打开一次?如果要在开始时打开浏览器一次并运行所有方法,然后关闭它 我建议遵循以下两个步骤 步骤1: 将浏览器调用代码包含在带有@BeforeSuite和@AfterSuite的方法中,以关闭浏览器/驱动器会话。这确保这些测试在测试套件之前和之后运行一次
protected static WebDriver Browser_Session;
@BeforeSuite
public void beforeSuite() {
Browser_Session=new FirefoxDriver();
Browser_Session.manage().timeouts().implicitlyWait(30000, TimeUnit.MILLISECONDS);
}
@AfterSuite
public void afterSuite() {
Browser_Session.quit();
}
步骤2:打开testng.xml并将所有此类类(测试方法)包含在单个套件中,从而确保首先调用浏览器(通过Selenium),然后在同一浏览器中运行其余所有方法。
此处“类Init”包含浏览器启动代码,类A和类B是Init的子类
希望这有帮助如果您想在一个实例中运行所有测试,我编写了自己的WebDriverFactory,下面是一些帮助示例:
public static WebDriver getDriver(){
if (driver == null) {
return new FireFoxDriver();
} else {
return driver;
}
}
现在删除AfterClass并将其添加到您的类中,它最终将关闭您的浏览器
static {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
try {
dismissDriver();
} catch (Exception e) {
}
}
});
}
public static void dismissDriver() {
if (driver != null) {
try {
driver.quit();
driver = null;
} catch (Throwable t) {
}
}
}
因此,您希望打开浏览器一次,运行所有测试,然后关闭它。。而不是为每个测试打开浏览器。。是吗?是的。现在在每次测试之前打开-“当测试套件以您喜爱的语言启动时,会发生以下情况:客户端/驱动程序与selenium RC服务器建立连接。selenium RC服务器启动一个浏览器(或重用一个旧的浏览器),其URL将在网页中加载selenium Core。”如果(driver==null){drvier=new FireFoxDrvier()}否则他将使用现有驱动程序并删除afterClass,它将关闭您的浏览器不是因为在第二次测试通过期间发生了NullPointerException吗?您是否已将WebDriver变量声明为静态?@martinixs:是的,我已将WebDriver声明为静态,受保护,并且工作正常。我已更新代码block和TestNG.xml屏幕截图。