1

尝试使用 TestNG 和 Selenium Grid 2 并行运行测试时,我似乎遇到了问题。

尽管打开了正确数量的浏览器以匹配我正在运行的测试数量,但所有测试的所有指令都被触发到同一个浏览器窗口。例如,每个测试将打开一个页面并尝试登录。四个浏览器窗口将打开,但一个浏览器窗口将导航到登录页面四次,然后输入用户名 4 次,而其余浏览器窗口保持不变不活动。

这是我开始网格的方式:

java -jar selenium-server-standalone-28.0.jar -role hub
java -jar selenium-server-standalone-28.0.jar -webdriver.chrome.driver="*location*/chromedriver_mac" -role node 

这是套件 xml 的设置方式:

<suite name="testng" verbose="1" parallel="classes">
    <test name="chrome">
        <packages>
            <package name="login"/>
            <package name="lists"/>
        </packages>
    </test>
</suite>

以下是测试如何布置的示例:

public class login_logout extends TestBase {
    @Test
    public void login(){
        //initiates login page object and call super user login
        LoginPage login = LoginPage.navigateTo(driver, base_url)
        LoggedInPage loggedIn = login.superuserlogin();
        }
    }

测试基地布置如下:

public class TestBase {
    public static WebDriver driver;
    public static DesiredCapabilitiess capabilities;
    @BeforeClass
    public static void setUp(){
        base_url = "*login page url*;
        capabilities = DesiredCapabilities.chrome();
        driver = new RemoteWebDriver(capabilities);
        driver.get(base_url);
    }
}

我错过了一些很明显的事情,但任何帮助将不胜感激。

提前致谢。

4

2 回答 2

4

The driver object is static. So you have 4 initializations happening and 4 browsers launching but the driver being a static , it would hold only the reference to the last initialized browser and hence all your commands are being executed against the same driver. You can try exploring Threadlocal objects for your parallel runs.

于 2013-02-14T17:57:41.373 回答
0

从我的角度来看,您在选择 WebDriver 和 TestNG 时做出了正确的决定。但是由于这些都是非常强大的工具,因此您应该了解一些基础知识。

第一步,一般来说,有一些编程经验很重要。

其次,您可以添加一些特定的技巧。

为什么不在每个测试类(在构造函数或@BeforeClass)中初始化一个WebDriver?

稍后,您还可以使用@DataProvider 和@Factory 模式进行配置。

这有点酷!

于 2013-02-18T16:45:42.833 回答