edgechers 发表于 2015-9-25 15:21:13

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);
        }
}



edgechers 发表于 2016-4-14 03:04:31

没人指教。。。
页: [1]
查看完整版本: selenium grid 想实现多线程启动多个chrome浏览器 碰到一个问题