2016-08-17 35 views
0

在我的TestNG的框架,我想執行@AfterTest方法,通過從客戶的Util類調​​用方法退出瀏覽器會話。我得到一個錯誤,因爲「參數」Webdriver驅動程序「是@Configuration在方法TearDown上所需要的,但尚未標記@可選或已定義」 讀取該錯誤後,我向AfterTest方法聲明瞭一個參數,如下所示。無法測試後的方法來執行-TestNG

@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(); 
} 

`

+0

到AfterTest方法 - 沒有運氣 '@AfterTest @參數({ 「webdriver的驅動程序」}) 公共無效TearDown中(webdriver的驅動程序){ Util.tearDown(司機)我做了以下的變化; }' –

+0

你在哪裏初始化驅動程序對象?它在Util類中嗎?如果是這樣,請將驅動程序傳遞給該方法。如果驅動程序正在初始化Test類,則將其作爲實例變量並傳遞給Util。 – Grasshopper

+0

'@AfterTest public void TearDown(){ Util.tearDown(driver); }'如果你在 – kotoj

回答

-1

原因@AfterTest方法沒有執行是因爲我沒有包括在XML文件中。我正在運行這個測試,就像運行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> 
0

首先,如果你想每@Test方法後運行tearDown()方法,你應該使用@AfterMethod而不是@AfterTest。請參閱我對此問題的回答:Difference between BeforeClass and BeforeTest in TestNG

另一個問題是您想要使用您的Util類,WebDriver未初始化。將@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... 
    } 
} 

希望它能幫助。

相關問題