【发布时间】:2016-08-17 09:08:39
【问题描述】:
在我的 TestNG 框架中,我想通过调用客户 Util 类的 方法 来执行 @AfterTest 方法以退出浏览器会话。我收到一个错误,因为 “@Configuration 在方法 TearDown 上需要参数 'Webdriver driver',但尚未标记为 @Optional 或已定义”
阅读该错误后,我向 AfterTest Method 声明了一个参数,如下所示。
@AfterTest
public void TearDown(WebDriver driver){
Util.tearDown(driver);
}
这是 Util 包中的拆解方法
public static void tearDown(WebDriver driver) {
driver.quit();
if (driver.toString().equals(null)) {
logger.info(driver.toString() + " is closed ");
}
}
我错过了什么吗?你能建议如何解决这个问题吗?谢谢:)
在此处添加类文件
@Listeners({com.customerItestListener.CustomItestListener.class})
public class TC_CreateOnloadProposal {
WebDriver driver;
@Test
@Parameters({ "Url", "BemsID", "TransferType", "WrkTrnsfrTtle", "purpse" })
public void run(String Url, String BemsID, String TransferType, String WrkTrnsfrTtle, String purpse) {
driver = BrowserFactory.getInstance("firefox", Url).getDriver();
PageObjCreateExpressProposal pg_loc = PageFactory.initElements(driver, PageObjCreateExpressProposal.class);
pg_loc.checkForElement(driver, pg_loc.Txt_Login, "set", BemsID);
pg_loc.checkForElement(driver, pg_loc.Img_Logon, "click");
pg_loc.checkForElement(driver, pg_loc.Lnk_onload, "click");
pg_loc.checkForElement(driver, pg_loc.Img_CrtOrSelctPrpsl, "click");
}
@AfterTest
public void TearDown(){
driver.quit();
}
`
【问题讨论】:
-
我对 AfterTest 方法进行了以下更改 - 运气不好
@AfterTest @parameters({"Webdriver driver"}) public void TearDown(WebDriver driver){ Util.tearDown(driver); } -
你在哪里初始化了驱动对象?它在 Util 类中吗?如果是这样,请删除将驱动程序传递给该方法。如果驱动程序已初始化 Test 类,则将其设为实例变量并将其传递给 Util。
-
如果您之前声明过驱动程序,
@AfterTest public void TearDown(){ Util.tearDown(driver); }应该可以工作 -
您收到此错误是因为您没有将
driver传递给您的TearDown方法。 -
@Grasshopper 我已经在我的类中初始化了 webdriver 并作为参数传递给 AfterTest 方法。无论传递参数,我都无法使用
@AfterTest方法解决问题,即使使用下面的简单代码 @AfterTest public void TearDown(){ driver.quit(); }