问题描述
当尝试使用junit5在browserstack中执行多浏览器并行测试时,我遇到了一个问题。测试被触发,并且两个浏览器都在浏览器堆栈中启动。但是,其中一种浏览器将超时,无法执行测试。我在下面附上了一个屏幕截图。
我尝试使用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>
已发生问题
测试将被触发并在浏览器堆栈中并行执行,但是其中一个浏览器将超时而无法执行测试
解决方法
在90秒钟内未从测试脚本收到Selenium或Appium命令时,就会发生这种情况。我认为这可能对您有帮助:https://www.browserstack.com/docs/automate/selenium/error-codes/browserstack-idle-timeout