在我的TestNG框架中,我想通过从客户 Util 类调用方法来执行@AfterTest
方法退出浏览器会话。我收到错误,因为“方法TearDown上的@Configuration需要参数'Webdriver驱动程序',但尚未标记为@Optional或已定义”
读完该错误后,我向AfterTest方法声明了一个参数,如下所示。
@AfterTest
public void TearDown(WebDriver driver){
Util.tearDown(driver);
}
以下是Util package
的拆解方法 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();
}
`
答案 0 :(得分:0)
首先,如果您想在每个tearDown()
方法后运行@Test
方法,则应使用@AfterMethod
代替@AfterTest
。请参阅我对此问题的回答:Difference between BeforeClass and BeforeTest in TestNG
另一个问题是您希望使用未初始化WebDriver的Util类。在您的测试用例所在的同一个类中包含@AfterTest
或@AfterMethod
方法的最简单方法,或者如果要将其存储在单独的类中,则创建一个抽象类并使用它。示例:
AbstractTest类
public class AbstractTest {
protected Webdriver driver;
@BeforeTest
public void setUp() {
// init your webdriver
this.driver = ...;
}
@AfterTest
public void tearDown() {
this.driver.quit();
}
}
您的测试类
public class MyTests extends AbstractTest {
@Test
public void myCoolTest() {
this.driver.get(...);
// etc...
}
}
希望它有所帮助。
答案 1 :(得分:-1)
@AfterTest
方法未执行的原因是因为我没有将其包含在xml文件中。我正在运行此测试As Run as TestNG xml。
以下是我对xml文件所做的更改:
<?xml version="1.0" encoding="UTF-8"?>
<suite name ="ExpressModule">
<test name = "Express module Test">
<parameter name="Url" value="http:XXXX"/>
<parameter name="BemsID" value="95188"/>
<parameter name="TransferType" value="Onload"/>
<parameter name="WrkTrnsfrTtle" value="Onload"/>
<parameter name="purpse" value="No Purpose"/>
<classes>
<class name="com.wtms.ExpressProposalCreation.TC_CreateOnloadProposal"/>
<methods>
<include name="run"/>
<include name="TearDown"/>
</methods>
</classes>
</test>
</suite>