Docker(九)-Docker创建Selenium容器
SeleniumHQ官方项目:https://github.com/seleniumHQ/docker-selenium 项目目前快速迭代中。
Selenium
这里主要针对的是 Selenium Grid,它用于分布式自动化测试,就是一套Selenium 代码可在不同的环境上运行。刚好,Docker可快速的创建各种环境。
Selenium Grid 有两个概念
hub :主节点,你可以看作 “北京总公司的测试经理”。
node:分支节点,你可以看作 “北京总公司的测试小兵A” 和 “上海分公司的测试小兵B”,还有 “深圳分公司的测试小兵C” …。
也就是说在Selenium Grid中只能有一个主hub,但可以在本地或远程建立 N 多个分支node,测试脚本指向主hub,由主hub 分配给本地/远程node 运行测试用例。
docker selenium 环境安装
以Ubuntu为例,在Ubuntu下安装Docker,请参考:Docker安装(Ubuntu)
docker hub(仓库):
https://hub.docker.com/r/selenium/hub/
1、下载主hub镜像(北京总公司的测试经理)
$ sudo docker pull selenium/hub
2、下载主node chrome 镜像(上海分公司的测试小兵B)
$ sudo docker pull selenium/node-chrome
3、查看镜像
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
selenium/node-chrome latest 1eba57bd3d79 12 days ago 823MB
selenium/hub latest d1437f7d9f87 12 days ago 285MB
4、启动主hub容器
$ sudo docker run -d -P --name selenium-hub selenium/hub
- -d 表示容器以守护态(Daemonized)形式运行。
- -P 表示 Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
5、启动分支node chrome 容器
$ sudo docker run -d --link selenium-hub:hub selenium/node-chrome
- –link 通过 link 关联
selenium-hub容器,并为其设置了别名hub
6、查看容器
$ sudo docker images
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cd0dac69875 selenium/hub "/opt/bin/entry_poin…" 12 hours ago Up 12 hours 0.0.0.0:32768->4444/tcp selenium-hub
18d139a6c36d selenium/node-chrome "/opt/bin/entry_poin…" 12 hours ago Up 12 hours eloquent_gates
这里需要注意,Selenium/hub 容器的端口号为 4444,对Ubuntu映射的端口为 32768,前面通过 -P 参数自动分配。
工作原理:
selenium Grid脚本 -> ubuntu(32768) -> Hub容器(4444) -> Node Chrome 容器
创建Grid测试脚本与运行
1、编写Selenium Grid 脚本(grid_demo.py)
from selenium import webdriver
from time import sleep
driver = webdriver.Remote(
command_executor='http://127.0.0.1:32768/wd/hub',
desired_capabilities={'browserName': 'chrome'}
)
driver.get('https://www.baidu.com')
print("get baidu")
driver.find_element_by_id("kw").send_keys("docker selenium")
driver.find_element_by_id("su").click()
sleep(1)
driver.get_screenshot_as_file("/home/fnngj/mypro/baidu_img.png")
driver.quit()
print("end...")
注意访问的端口号和浏览器,因为我们只启动了node chrome容器,如果这里设置Friefox的话,需要你启动 node firefox 容器,hub找不到合适的node会报错。
另外,我们为了验证脚本是否真的执行加上了打印和截图。
2、运行脚本
$ python3 grid_demo.py
get baidu
end...
3、查看截图

百度页面是被渲染出来了,但中文有乱码。
Docker(九)-Docker创建Selenium容器的更多相关文章
- docker 使用:创建nginx容器
在上一节中了解了镜像和容器.对于镜像可以这样的理解,镜像相当于一个光盘,里面刻录了一个系统这个系统已经带有相关的服务了. 容器是通过镜像这个光盘安装的一个操作系统,光盘预加了什么服务,容器就有什么服务 ...
- Docker | Compose创建mysql容器
本文通过Docker Compose来创建mysql容器 在linux服务器上创建文件,用于管理容器 mkdir docker-mysql cd docker-mysql vim docker-com ...
- centos7下安装docker(8.2进入容器)
那些在后台运行的新建的容器,通常不是我们想要的,我们要进行一些修改,比如安装服务,创建用户,查看日志,调整网络等等,这些操做都要进入容器去进行修改,今天我们来讨论如何进入容器. 1.docker at ...
- Docker学习--docker的基本认识
1.Docker 架构 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建. 容器与镜像的关系类似于 ...
- docker初识-docker安装、基于docker安装mysql及tomcat、基本命令
一.docker是什么 用go语言开发,开源的应用容器引擎,容器性能开销极低 二.整体架构图 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 r ...
- docker学习笔记4:利用docker hub上的mysql镜像创建mysql容器
docker hub上有官方的mysql镜像,我们可以利用它来创建mysql容器,作为一个服务容器使用. 1.下载mysql镜像 docker pull mysql 2.创建镜像 docker run ...
- Docker(八)-Docker创建Nginx容器
获取Nginx镜像 最简单的方法就是通过 docker pull nginx 命令来创建 Nginx容器. $ sudo docker pull nginx 或者: $ sudo docker pul ...
- Docker实战之创建一个tomcat容器
一.Docker与虚拟机的区别 二.Docker学习步骤 2.1:安装宿主操作系统 在VMVare中安装了Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic ...
- Docker使用Dockerfile创建支持ssh服务自启动的容器镜像
原文链接:Docker使用Dockerfile创建支持ssh服务自启动的容器镜像 1. 首先创建一个Dockerfile文件.文件内容例如以下 # 选择一个已有的os镜像作为基础 FROM cento ...
随机推荐
- 6、JVM--类文件结构(上)
6.1.概述 写的程序需要经编译器翻译成由0和1构成的二进制格式才能由计算机执行 6.2.无关性基石 Java在刚刚诞生之时曾经提出过一个非常著名的宣传口号:“一次编写,到处运行(Write Once ...
- 【转】SVN branches trunk 合并 讲解
转自:http://blog.csdn.net/e3002/article/details/21469437 使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到 ...
- [转]用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口
原文链接: 1.用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口 2.Windows MFC 两个OpenGL窗口显示与线程RC问题
- OpenCV——Brisk特征检测、匹配与对象查找
检测并绘制特征点: #include <opencv2/opencv.hpp> #include <opencv2/xfeatures2d.hpp> #include < ...
- 01-Maven功能特点
1.Maven简介 2.Maven重要性 3.Maven原理
- [Usaco2012 Dec]First! BZOJ3012
分析: 其实我们可以很容易的想到,如果一个串是另一个串的子串,那么必定长的那个串不可能是字典序最小的串.其次,如果一个串为了使他成为字典序最小的串儿出现了矛盾的情况,那么也不可能是字典序最小的串.那么 ...
- 【TPM】tpm搭建基础指南
pm君第一次通过各种摸索,成功搭建了tpm模拟环境,本篇博客记录了如何去搭建tpm模拟环境,希望能给大家一些帮助. 参考资料(推荐看) ubuntu下安装TPM模拟器 --成功步骤:参考至第2节-安装 ...
- Exp1 PC平台逆向破解(5)M
Exp1 PC平台逆向破解(5)M [ 直接修改程序机器指令,改变程序执行流程] 用命令cp pwn1 20155320备份pwn1 输入objdump -d 20155320反汇编,找到call指令 ...
- 复选框、单选框 jquery判断是否选中Demo
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="eachcheckbox.a ...
- CodeForces 1073F Choosing Two Paths
Description You are given an undirected unweighted tree consisting of \(n\) vertices. An undirected ...