java - @Factory 注解不会按需要执行 testng 类
问题描述
对于我当前的项目,我正在使用testng
类并@factory
调用它们。以下是代码
test1
public class Test1 extends Setup{
@Test
public void facebook() {
System.out.println("Inside Facebook");
}
@BeforeClass
public void beforeClass() {
driver.get("https://www.facebook.com/");
}
@AfterClass
public void afterClass() {
driver.close();
driver.quit();
}
}
test2
public class Test2 extends Setup{
@Test
public void google() {
System.out.println("Inside Google");
}
@BeforeClass
public void beforeClass() {
driver.get("https://www.google.com/");
}
@AfterClass
public void afterClass() {
driver.close();
driver.quit();
}
setup
public class Setup {
public static WebDriver driver;
public Setup(){
initialise();
}
public void initialise()
{
// SELECT THE CUSTOM PROFILE FOR SKIPPING THE TRUST CERTIFICATE
ProfilesIni prof = new ProfilesIni();
FirefoxProfile ffProfile= prof.getProfile("MyProfile");
// ADDING THE PAGE ON EXCETION
ffProfile.setAcceptUntrustedCertificates(true);
ffProfile.setAssumeUntrustedCertificateIssuer(false);
// INVOKE THE DRIVER
driver = new FirefoxDriver(ffProfile);
}
Factory Class
public class Driver {
@Factory
public Object[] objInitialise(){
ArrayList<Object> module = new ArrayList<Object>();
module.add(new Test1());
module.add(new Test2());
return module.toArray();
}
现在在运行driver
类之后,它首先打开一个具有 url: 的浏览器about:blank&utm_content=firstrun
,然后打开另一个具有所需 url: 的浏览器https://www.facebook.com/
。
在 Eclipse 控制台中,我看到以下错误
org.openqa.selenium.remote.SessionNotFoundException: The FirefoxDriver cannot be used after quit() was called.
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.firefox.FirefoxDriver$LazyCommandExecutor.execute(FirefoxDriver.java:377)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:644)
at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:316)
at TestMavenGroupId.TestMavenArtifactId.Test2.beforeClass(Test2.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:523)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:224)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:146)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
以下应该是我正在寻找的实际输出
Inside Facebook
Inside Google
你能帮我理解我错过了什么吗?我没有得到正确的输出。我希望为每个测试打开单独的浏览器,并在各自的浏览器上一个接一个地启动 url。
Selenium 版本:2.53.1
Firefox 版本:47.0.1
解决方案
想通了,我必须在相应的测试类中初始化驱动程序并避免使用driver.quit()
,这是因为driver
声明了static
。现在以下是测试代码
public class Test1 extends Setup{
@Test
public void facebook() {
System.out.println("Inside Facebook");
}
@BeforeClass
public void beforeClass() {
driver = new FirefoxDriver();
driver.get("https://www.facebook.com/");
}
@AfterClass
public void afterClass() {
driver.close();
}
}
推荐阅读
- c# - 刷新下拉值,选择的值不应出现在下一个下拉列表中
- android - 如何在 android 中借助 shape drawable 制作多边形?
- node.js - 未定义错误:检查对象/Json中是否存在字段
- jquery - 如何通过更改 div 区域使 textarea 具有弹性
- sql-server - django:数据库驱动程序不支持现代数据时间类型
- php - 如果在 WooCommerce 中没有付款,X 天后自动取消订单
- c# - 使用“new SelectList()”创建下拉列表时出现“无效的列名”
- c++ - 如何以 clang 格式为外部标题创建类别?
- python-3.x - 无法使用 SQLAlchemy 连接到 MYSQL
- r - 从矩阵中提取行名和列名及其值