有人可以推薦使用testng在@AfterClass中'tearDown'的最佳方法嗎?我偶爾會看到掛起的窗口或彈出窗口,無法返回主頁以優雅地註銷下一課,以啓動並避免模態對話框錯誤。用Selenium和Java重置TestNG中瀏覽器狀態的最佳方法
我試着在主頁上得到一個窗口句柄,然後在彈出窗口中,然後把switchTo放在我的@AfterClass中,但它不起作用。我也試過driver.close()。但是接下來的課程將被跳過,導致無法訪問的瀏覽器錯誤。
我真的需要一個好的tearDown @AfterClass方法,它可以擺脫頁面上的任何錯誤和彈出窗口,並且只需在登錄頁面上留下一個乾淨的瀏覽器窗口,以便運行下一個測試類。
編輯:添加代碼:
package TestPackage;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
import org.testng.annotations.Test;
//@Test (priority = 1)
public class test1 {
public static WebDriver driver = new FirefoxDriver();
Environment environment = Environment.QA03();
User testUser = User.ns_system();
AxUtilities axUtilities;
@BeforeClass
@Parameters("environment")
@Test
public void login(String environment1){
// environment = new Environment(environment1);
axUtilities = new DAxUtilities(environment1, driver);
// DAxUtilities dAxUtilities = new DAxUtilities(environment);
Login login = new Login();
login.getLogin(testUser, axUtilities, driver);
axUtilities.sleep(5000);
}
@Test
public void testNothing(){
String s = "public void testNothing() reached...";
System.out.println(s);
}
@AfterClass
public void verifyOKAndLogout() {
driver.quit();
// DAxUtilities dAxUtilities;
}
}
測試類1和2是除了類名相同......
而且測試是從XML文件中運行。我已經試過的XML文件的許多變種,即使將每個測試在其自己的XML文件:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestSuite1" verbose="1">
<parameter name="environment" value="QA03"/>
<test name="Test1">
<classes>
<class name="TestPackage.test1"/>
<!--<class name="TestPackage.test2"/>-->
</classes>
</test>
<test name="Test2">
<classes>
<class name="TestPackage.test2"/>
</classes>
</test>
</suite>
但總有兩個捲筒紙驅動器生成,一個接一個的權利,在測試的開始在執行任何其他代碼之前運行。斷點顯示代碼在運行第1類測試之前肯定從第1類的開始跳到第2類的開始...
我全心全意同意,測試間共享瀏覽器會導致不可靠,不穩定和不可用測試 –
其實我試圖按照你描述的方式運行我的測試,但它不起作用。 TestNG正在從一個類跳到另一個類並摧毀我的驅動程序初始化。請參閱我的其他帖子在這裏:http://stackoverflow.com/questions/18516227/testng-is-running-classes-out-of-order-skipping-between-classes-of-tests –
我應該澄清,當我跑driver.quit()在一個類中,在@AfterClass中,那麼我的下一個類將不會運行。即使一個新的webdriver被初始化在最上面。它將被跳過。它會拋出無法訪問的瀏覽器錯誤。 Testng初始化class1的webdriver,然後立即跳到class2並初始化class2的webdriver(yes,really!),然後跳回到class 1並開始運行測試。我無法在class1的末尾執行driver.close(),因爲class2的驅動程序初始化已經運行得太快,並且在實際需要時不會再運行。我希望這是明確的... –