Browserstack:在尝试使用junit5

问题描述

当尝试使用junit5browserstack中执行多浏览器并行测试时,我遇到了一个问题。测试被触发,并且两个浏览器都在浏览器堆栈中启动。但是,其中一种浏览器将超时,无法执行测试。我在下面附上了一个屏幕截图。

我尝试使用Junit 4,它工作正常。在junit 5和junit 4中执行并行测试的方式略有不同

public class browserstackJUnitTest {
    public WebDriver driver;
    private Local l;
    private static JSONObject config;

    @BeforeEach
    public void setUp(TestInfo testInfo) throws Exception {
        if (System.getProperty("config") != null) {
            JSONParser parser = new JSONParser();
            config = (JSONObject) parser.parse(new FileReader("src/test/resources/conf/" + System.getProperty("config")));
        }
        JSONArray allEnvs = (JSONArray) config.get("environments");

        for (int i = 0; i < allEnvs.size(); i++) {
            System.out.println("Environments: " + allEnvs.get(i));

            Object envs = allEnvs.get(i);
            DesiredCapabilities capabilities = new DesiredCapabilities();

            Map<String,String> envCapabilities = (Map<String,String>) envs;
            Iterator it = envCapabilities.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry pair = (Map.Entry) it.next();
                capabilities.setCapability(pair.getKey().toString(),pair.getValue().toString());
            }

            Map<String,String> commonCapabilities = (Map<String,String>) config.get("capabilities");
            it = commonCapabilities.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry pair = (Map.Entry) it.next();
                if (capabilities.getCapability(pair.getKey().toString()) == null) {
                    capabilities.setCapability(pair.getKey().toString(),pair.getValue().toString());
                }
            }

            capabilities.setCapability("name",commonCapabilities.get("name").concat("_").concat(testInfo.getdisplayName()));

            String username = System.getenv("browserstack_USERNAME");
            if (username == null) {
                username = (String) config.get("user");
            }

            String accessKey = System.getenv("browserstack_ACCESS_KEY");
            if (accessKey == null) {
                accessKey = (String) config.get("key");
            }

            if (capabilities.getCapability("browserstack.local") != null && capabilities.getCapability("browserstack.local") == "true") {
                l = new Local();
                Map<String,String> options = new HashMap<String,String>();
                options.put("key",accessKey);
                l.start(options);
            }

            driver = new RemoteWebDriver(new URL("https://" + username + ":" + accessKey + "@" + config.get("server") + "/wd/hub"),capabilities);

        }
    }

    @AfterEach
    public void tearDown() throws Exception {
        if (driver != null) driver.quit();
        if (l != null) l.stop();
    }

}

paralle.conf.json

{
  "server": "hub-cloud.browserstack.com","user": "<user>","key": "<key>","capabilities": {
    "build": "MultibrowserTest","name": "ParallelExecute","browserstack.debug": true
  },"environments": [
    {
      "browser": "chrome","os": "Windows","os_version": "10"
    },{
      "browser": "Firefox","os_version": "10"
    }
  ]
}

样本测试

@Test
    public void sampleTest1() throws InterruptedException {
        driver.get("https://www.google.com/");
        driver.findElement(By.name("q")).sendKeys("Hello World");
        Thread.sleep(3000);
        driver.findElement(By.name("btnK")).click();
    }

触发为行家

mvn clean test -P parallel

在pom.xml中

<properties>
 <configurationParameters>
  junit.jupiter.execution.parallel.enabled = true 
  junit.jupiter.execution.parallel.mode.default = concurrent
 </configurationParameters>

已发生问题

测试将被触发并在浏览器堆栈中并行执行,但是其中一个浏览器将超时而无法执行测试

enter image description here

解决方法

在90秒钟内未从测试脚本收到Selenium或Appium命令时,就会发生这种情况。我认为这可能对您有帮助:https://www.browserstack.com/docs/automate/selenium/error-codes/browserstack-idle-timeout