测试方法-TestNG后无法执行

时间:2016-08-17 09:08:40

标签: selenium testng

在我的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();
}

`

2 个答案:

答案 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>