Selenium Standalone Server Hub和Chrome、Firefox的节点配置的Docker镜像,Hub分发到Node子节点进行分布式web自动化测试
一、安装selenium环境
1、docker下载主节点hub镜像和子节点各浏览器node镜像
docker pull selenium/hub
docker pull selenium/node-chrome-debug
docker pull selenium/node-firefox-debug
2、查看docker selenium镜像
selenium/node-firefox-debug latest c24a87262cd5 10 months ago 807MB
selenium/node-chrome-debug latest 6bdc197e1f6f 10 months ago 952MB
selenium/hub latest 09508196737d 10 months ago 310MB
3、启动容器
hub主节点:负责对子节点分发请求
docker run -d --name wxhub -p 4444:4444 selenium/hub
node子节点:--link 主节点进行关联,debug版本可以进行远程调试 使用vnc 密码 secret
docker run -d -P -p 5900:5900 --link wxhub:hub selenium/node-chrome-debug
//docker run -d -P -p 5901:5900 --link wxhub:hub selenium/node-firefox-debug
单个容器可以运行5个浏览器实例:
docker run -d -p 5902:5900 --link wxhub:hub --name wxchrome55 -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 -e NODE_REGISTER_CYCLE=5000 -e DBUS_SESSION_BUS_ADDRESS=/dev/null selenium/node-chrome-debug
4、查看docker容器
MacBookPro:~ wuxi$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a5d1086f5f2 selenium/node-chrome-debug "/opt/bin/entry_poin…" 9 months ago Up About a minute 0.0.0.0:5902->5900/tcp wxchrome55
1fe8d3670600 selenium/node-chrome-debug "/opt/bin/entry_poin…" 10 months ago Up About a minute 0.0.0.0:5900->5900/tcp wxchromelast
533bb64aaf4b selenium/hub "/opt/bin/entry_poin…" 10 months ago Up About a minute 0.0.0.0:4444->4444/tcp wxhub
打开地址:http://localhost:4444/grid/console 可以看到右边的chrome 有5个浏览器图标
查看详情:可以看到两node节点都注册到了hub 4444端口,还有其他一些属性如下,需要的话自己可以后面研究下
二、java代码编写
如果部署到其他机器,localhost可以换成其他IP地址
public static String WebDriverUrl = "http://localhost:4444/wd/hub";
/**
docker运行
**/
public WxWebdriver() throws MalformedURLException {
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setBrowserName("chrome");
//加载启动项
capabilities.setCapability("chromeOptions", chromeOptions());
driver = new RemoteWebDriver(new URL(WebDriverUrl),capabilities);
}
设置chrome启动属性:
public static ChromeOptions chromeOptions() {
Map<String, Object> prefs = new HashMap<String, Object>();
ChromeOptions options = new ChromeOptions();
//无界面参数
//options.addArguments("headless");
//禁用沙盒
//options.addArguments("no-sandbox");
//禁用插件
//options.addArguments("--disable-plugins","--disable-images","--start-maximized","--disable-javascript");
//options.addArguments("–-user-data-dir==/Users/wuxi/Library/Application Support/Google/Chrome");
//prefs.put("profile.managed_default_content_settings.images", 2);
//prefs.put("profile.default_content_setting_values.notifications", 2);
options.addArguments("--incognito");
options.setExperimentalOption("prefs", prefs);
//options.addArguments("--lang=" + "en_GE");
return options;
}
运行代码打开百度,查看浏览器启动情况,可以看到单实例的node节点已经开启,浏览器图标置灰,容器端口为:0.0.0.0:5900->5900/tcp
用VNC连接到server查看浏览器打开情况,密码secret
参考:
https://github.com/SeleniumHQ/docker-selenium