selenium grid 想实现多线程启动多个chrome浏览器 碰到一个问题
demo:使用junit的JUnitCore实现并发包括两个用例类tastcase1.java,tastcase2.java,都是用来启动chrome浏览器,还有一个使用多线程来run两个用例的类bingfa.java,用的是junit,【遇到的问题:】
在grid两个子节点机器分别跑tastcase1、tastcase2这两个用例,即同时启动了两个浏览器并打开一个网址,启动后只有一个浏览器(节点机器A)可正常执行,另外一个浏览器(节点机器B)起来后直接挂在那里无法往下执行(url栏显示data;,如下图),实际结果就是两个用例都在一个浏览器执行了,而不是两个用例分别在两个浏览器上执行;
x
比较了一下节点机器A和B的selenium 执行日志,发现可以执行用例的A机器上的chromedriver的ID和无法执行用例的B机器上的chromedriver的ID 两者是相同的,从而怀疑是否是这个问题导致的。
A:
B:
这个问题困扰了我好久,请问大家有没有遇到类似的问题呢?求助,第一次搞自动化测试的项目,以下是demo代码
【testcase1】
public class testcase1 {
@Test
public void run() {
Init.OpenUrl("1");
long id = Thread.currentThread().getId();
System.out.println("Sample test-method 1. Thread id is: " + id);
}
}
【testcase2】
public class testcase2 {
@Test
public void run() {
Init.OpenUrl("2");
long id = Thread.currentThread().getId();
System.out.println("Sample test-method 1. Thread id is: " + id);
}
}
【Init.java】
public class Init{
public static WebDriver driver;
/**
*@param nodeChromeVersion表示node机器上两个浏览器设置的version,用来标识两个node
*/
public void OpenUrl(String nodeChromeVersion){
Map<String, String> mobileEmulation = new HashMap<String, String>();
mobileEmulation.put("deviceName", "Google Nexus 5");
Map<String, Object> chromeOptions = new HashMap<String, Object>();
chromeOptions.put("mobileEmulation", mobileEmulation);
DesiredCapabilities capability = new DesiredCapabilities();
capability.setBrowserName("chrome");
capability.setVersion(nodeChromeVersion);
capability.setPlatform(Platform.WINDOWS);
capability.setCapability(ChromeOptions.CAPABILITY,chromeOptions);
try {
driver = new RemoteWebDriver(new URL("http://10.199.144.163:4444/wd/hub"), capability);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
【bingfa.java】
public class Zbingfa {
@Test
public void test() {
Class[] cls={Ztestcase1.class,Ztestcase2.class };
JUnitCore.runClasses(ParallelComputer.classes(), cls);
}
}
没人指教。。。
页:
[1]