0

我正在尝试并行运行属于同一类的两种方法。我的代码启动了两个单独的浏览器,但是当第一个方法完成时,它并没有杀死那个特定的浏览器,而是杀死了另一个浏览器。

方法 A - 浏览器 A - 假设需要 20 秒

方法 B - 浏览器 B - 假设需要 40 秒

当方法 A 完成时,它会杀死浏览器 B 而不是浏览器 A。

这是我的代码:

public class AccountTest {

    private WebDriver driver;

    @BeforeMethod(alwaysRun=true)
    public void initializeDriver() throws MalformedURLException {
        driver = new FirefoxDriver();
        driver.manage().deleteAllCookies();
        driver.manage().window().maximize();
    }

    @Test(groups="Login")
    public void loginTest() {
        HomePage homePage = new HomePage(driver);
        SignInPage signInPage = homePage.signIn();
        signInPage.signIn("test_user0401@fakemail.com", "abcd1234");
    }


    @Test(groups="Register")
    public void registerTest() {
        HomePage homePage = new HomePage(driver);
        SignInPage signInPage = homePage.signIn();
        RegisterPage registerPage = signInPage.register();
        registerPage.register();
    }

    @AfterMethod(alwaysRun=true)
    public void tearDown() {
        driver.quit();
    }
}

这是我的 testng.xml:

<suite name="Automation Suite" parallel="methods" verbose="10">

    <test name="AccountTest">
        <classes>
            <class name="com.selenium.test.AccountTest"/>
        </classes>
    </test>

</suite>

我目前没有使用 Grid。试图在我的本地进行这项工作,但我将开始使用 Saucelabs 来运行并行测试。

你知道有什么问题吗?

提前致谢

4

1 回答 1

1

TestNG 只会实例化你的类一次。因此,每次您的@BeforeMethod方法运行时,驱动程序字段都会被覆盖。

要改变这一点,你可以并行运行你的类,或者你可以设置一个@DataProvider来传递驱动程序。

于 2014-04-07T13:50:54.690 回答