【问题标题】:selenium grid parallel execution on the same browserselenium 网格在同一浏览器上并行执行
【发布时间】:2026-01-30 13:15:01
【问题描述】:

我正在使用 selenium-grid,并且想知道如何在同一个浏览器上并行启动我的测试,例如:Chrome

问题是,Chrome 一直只打开一个实例,直到第一个测试完成,然后开始下一个测试。

请帮帮我:)

public WebDriver createDriverGrid() throws MalformedURLException {
        String hubUrl = "http://localhost:4446/wd/hub";
        ChromeOptions capabilities = new ChromeOptions();
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "chrome");
        driver.set(new RemoteWebDriver(new URL(hubUrl), capabilities));
        return driver.get();
    }

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="GoogleTestSuite" verbose="2" parallel="tests" thread-count="2" preserve-order="true">


    <test name="GoogleTest-CH" parallel="true">
    <!--<parameter name="browser" value="chrome"></parameter>-->
     <classes>
        <class name="com.herokuapp.theinternet.tests.GoogleTests" />
     </classes>
   </test>

</suite>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="PositiveTestSuite" verbose="2" parallel="tests" thread-count="2" preserve-order="true">
    <test name="PositiveTest-CH" parallel="true">
     <classes>
        <class name="com.herokuapp.theinternet.tests.PositiveTests" />
         <!--<class name="com.herokuapp.theinternet.tests.PositiveTests" />-->
     </classes>
   </test>
</suite>

【问题讨论】:

  • 欢迎来到 SO。 createDriverGrid 方法在哪里?它是@BeforeClass 的一部分吗?
  • 它是@BeforeMethod 的一部分。 ``` @BeforeMethod(alwaysRun = true) protected void setUp() throws MalformedURLException { // 创建驱动 BrowserDriverFactory factory = new BrowserDriverFactory();设置当前线程名称(); driver = factory.createDriverGrid(); // 最大化浏览器窗口 driver.manage().window().maximize(); } ```
  • 还想知道您是否有足够的节点来运行并行脚本。

标签: java selenium selenium-grid


【解决方案1】:

如果您想以并行执行的方式开始测试,那么您需要编写两次测试方法。根据您的 TestNG.xml,您必须编写 parallel="tests" thread-count="2",这意味着我们要并行执行两个测试方法。

请用以下代码替换您的 xml:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="PositiveTestSuite" parallel="tests" thread-count="2">

    <test name="PositiveTest-CH">
     <classes>
        <class name="com.herokuapp.theinternet.tests.PositiveTests" />
     </classes>
   </test>

   <test name="PositiveTest-CH1">
     <classes>
        <class name="com.herokuapp.theinternet.tests.PositiveTests" />
     </classes>
   </test>

</suite>

试试这个,它会正常工作的。

【讨论】:

    【解决方案2】:

    您可以通过使用 jenkins 管道来实现这一点,而无需修改您的源代码

    【讨论】:

    • 我们该怎么做?