DataProvider并行文本输入 - 多线程问题

时间:2018-06-17 11:10:26

标签: java selenium-webdriver parallel-processing testng testng-dataprovider

我想用DataProvider实现并行测试运行以测试输入字段。

预期结果 DataProvider中每个文本的并行测试

  1. 打开页面
  2. 写" Text1" (或" Text2"或" Text3")
  3. 按"搜索"按钮
  4. 实际结果 将DataProvider中的每个字符串作为一个

    进行一次测试
    1. 打开页面
    2. 写" Text1Text2Text3" (为什么会这样?)
    3. 按"搜索"按钮
    4. 如何在DataProvider中输入字段的每个字符串中解决此问题? 这是我的代码。

      的testng.xml:

      <suite name="TestParallel" parallel="tests" thread-count="2" data-provider-thread-count="2" preserve-order="false" >
          <test name="ChromeTest">
              <parameter name="browser" value="Chrome" />
              <classes>
                  <class name="com.test.DataProviderTestParallel"/>
              </classes>
          </test>
          <test name="FirefoxTest">
              <parameter name="browser" value="Firefox" />
              <classes>
                  <class name="com.test.DataProviderTestParallel"/>
              </classes>
          </test>
          <test name="EdgeTest">
              <parameter name="browser" value="Edge" />
              <classes>
                  <class name="com.test.DataProviderTestParallel"/>
                  </class>
              </classes>
          </test>
      </suite>
      

      测试

      @BeforeTest
      @Parameters("browser")
      public static void initSelenium(String browser) throws Exception {
          // Check if parameter passed from TestNG is 'firefox'
          if(browser.equalsIgnoreCase("firefox")){
              // Create firefox instance
              FirefoxDriverManager.getInstance().setup();
              driver = new FirefoxDriver();
          }
          // Check if parameter passed as 'chrome'
          else if(browser.equalsIgnoreCase("chrome")){
              ChromeDriverManager.getInstance().setup();
              driver = new ChromeDriver();
          }
          // Check if parameter passed as 'Edge'
          else if(browser.equalsIgnoreCase("Edge")){
              EdgeDriverManager.getInstance().setup();
              driver = new EdgeDriver();
          }
          else{
              // If no browser passed throw exception
              throw new Exception("Browser is not correct");
          }
          driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      }
      
      @DataProvider(name = "forSearch", parallel = true)
          public Object[] forSearch() {
              return new Object[]{
                      "Text1",
                      "Text2",
                      "Text3"
              };
          }
      
      @Test(description = "Search text", dataProvider = "forSearch")
      public void searchWithButton(String searchText) {
          SupportPageObject supportPage = new SupportPageObject();
          SearchResultPageObject searchResultPage = new SearchResultPageObject();
          supportPage.open();
          supportPage.isOpen();
          // Input text into field
          supportPage.writeQuestion(searchText);
          // Press "search" button
          supportPage.searchWithButton();
          searchResultPage.isOpen();
      }
      

      UPD:我发现当我拥有 data-provider-thread-count 时,此问题的重现次数大于1。 在这种情况下,它会打开 thread-count 的窗口数,然后在最后一个输入 data-provider-thread-count 来自DataProvider的文本。 但仍然不知道如何修复它并将DataProvider文本分别输入到每个打开的窗口中。

1 个答案:

答案 0 :(得分:0)

您需要返回一个Object [] []。

@DataProvider(name = "forSearch", parallel = true)
    public Object[][] forSearch() {
        return new Object[][]{
                new Object[] { "Text1"},
                new Object[] { "Text2"},
                new Object[] { "Text3"}
        };
    }
相关问题