При попытке выполнить параллельный тест с несколькими браузерами в стеке браузеров с использованием junit5 я столкнулся с проблемой. Тесты запускаются, и оба браузера запускаются в стеке браузера. Однако время ожидания одного из браузеров истекает без выполнения тестов. Я прикрепил снимок экрана ниже.
Я пробовал с 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": "Windows",
"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();
}
Запускается как maven
mvn clean test -P parallel
В pom.xml
<properties>
<configurationParameters>
junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent
</configurationParameters>
Произошла проблема
Тест будет запущен и будет выполняться параллельно в стеке браузера, однако время ожидания одного из браузеров истечет без выполнения тестов