本篇文章给大家谈谈在Centos7下docker配置自动化环境镜像(python3.7+selenium3.11+firefox62+geckodriver0.21),同时本文还将给你拓展Centos
本篇文章给大家谈谈在 Centos7 下 docker 配置自动化环境镜像 (python3.7+selenium 3.11+firefox 62+geckodriver 0.21),同时本文还将给你拓展Centos7上的Python Selenium / Geckodriver无法启动:无法找到匹配的功能集、FireFox中的Selenium OpenQA.Selenium.DriverServiceNotFoundException、geckodriver.exe不在当前目录或路径变量中,Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta、NoSuchWindowError:浏览上下文已被GeckoDriver Firefox和Protractor(Selenium)丢弃等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 在 Centos7 下 docker 配置自动化环境镜像 (python3.7+selenium 3.11+firefox 62+geckodriver 0.21)
- Centos7上的Python Selenium / Geckodriver无法启动:无法找到匹配的功能集
- FireFox中的Selenium OpenQA.Selenium.DriverServiceNotFoundException
- geckodriver.exe不在当前目录或路径变量中,Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta
- NoSuchWindowError:浏览上下文已被GeckoDriver Firefox和Protractor(Selenium)丢弃
在 Centos7 下 docker 配置自动化环境镜像 (python3.7+selenium 3.11+firefox 62+geckodriver 0.21)
最近在学习 Docker,准备做自动化测试代码集成的功能。如下文章的前提是已经安装好 linux 系统,且成功安装好 Docker。
接下来我会按步骤一步一步的对自动化需要的一些环境进行安装,如果没有特别说明,涉及到的目录都是在对应步骤下的目录。
软件环境配置如下:
docker安装在root权限下
python 3.7.0
selenium 3.11
geckodriver 0.21.0 //将其放置于/usr/bin目录下(固定目录)
firefox 62.0 //将其主目录添加至环境变量中
具体步骤如下:(在软件环境配置保持一致的前提下,只需要按照代码块中的代码一步一步进行执行,能生成一个 docker 镜像)
PS:1-11、14 步都是在 Docker 的容器中安装,13 步是在虚拟机上进行安装
1、打开虚拟机,进入终端,在官网上去拉一个 centos 系统


1 docker pull centos
代码实现如图所示:
PS: 有时候使用 docker 会出现【Failed to restart dock.service: Unit not found.】,此时执行如下命令:
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
2、找到你拉下来的 centos,找到对应的 image id


1 docker image ls
3、运行对应 iamge id (如我的是 centos,对应的 image id 是 5182)


1 docker run -it 5182 bash
4、此时已经进入到容器中,开始对自动化需要的内容进行安装,安装 python3.7 以前会有很多依赖,先安装依赖
代码中的依赖进行一条一条的安装:


1 安装前的准备(各种依赖及工具安装)
2 yum -y install gcc make
3 yum -y install libffi-devel
4 yum -y install zlib zlib-devel
5 yum -y install bzip2 bzip2-devel
6 yum -y install ncurses ncurses-devel
7 yum -y install readline readline-devel
8 yum -y install openssl openssl-devel
9 yum -y install openssl-static
10 yum -y install xz lzma xz-devel
11 yum -y install sqlite sqlite-devel
12 yum -y install gdbm gdbm-devel
13 yum -y install tk tk-devel
5、centos 这个系统是很干净的,并没有安装 wget,如果需要对其他应用进行安装,需要先安装 wget,再对其他应用进行安装


1 yum -y install wget
6、python3.7.0 安装后会出现 ssl 报错的问题,可以通过安装 LibreSSL 这种方式来解决(LibreSSL 安装网址可以去官网中下载,下载你需要的版本,这里以 2.8.0 来举例)
wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.8.0.tar.gz
下载地址如下:https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/
解压缩 LibreSSL 后,进入 LibreSSL 目录,进行配置文件修改,执行如下代码:


1 ./config --prefix=/usr/local/ssl //放到/usr/local/ssl 路径
2 make & make install
3 mv /usr/bin/openssl /usr/bin/openssl.bak
4 mv /usr/include/openssl /usr/include/openssl.bak
5 ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl //创建快捷方式
6 ln -s /usr/local/ssl/include/openssl /usr/include/openssl
7
8 进入如下目录:
9 cd /etc/ld.so.conf.d //扩展centos默认访问库,使可访问libressl库文件
10
11 新建文件 :
12 vi libressl-2.8.0.conf
13
14 将以下行加入文件,并保存 :
15 /usr/local/ssl/lib
16
17 运行命令使生效:
18 ldconfig
19
20 编辑/etc/profile文件,新增如下环境变量:
21
22 vi /etc/profile
23
24 在profile文件中加入如下内容,并保存退出:
25 export LDFLAGS="-L/usr/local/ssl/lib"
26 export CPPFLAGS="-I/usr/local/ssl/include" //引号内第一个字母是大写i
27 export PKG_CONFIG_PATH="/usr/local/ssl/lib/pkgconfig"
7、一切的依赖都安装、配置完成后,开始安装 python3.7.0
在 python 的官网下,去下载对应的版本,目前是 python3.7.0


1 下载python3.7.0:
2 wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
3
4 解压缩 : tar zxvf Python-3.7.0.tgz
5
6 //解压缩后,进入python3.7.0对应的目录,分别执行对应的命令:
7 cd python3.7.0
8
9 //配置安装目录,使其安装在/usr/local目录下,这样后面才能成功安装setuptools和pip
10 ./configure --prefix=/usr/local --enable-shared CFLAGS=-fPIC
11
12 //安装
13 make & make install
14
15 //创建快捷方式,是输入python时默认打开python3.7解释器,而不是系统默认的版本
16 ln -s /usr/local/bin/python3.7 /usr/local/bin/python
8、由于后续安装 setuptools、pip 有其他的压缩包,比如 unzip
安装 zip 压缩包:


1 yum install -y unzip zip
9、setuptools、pip 下载、解压缩(工具包都是在官网中去下载的,如果网址不行,建议去官网中对应的版本进行下载)


1 下载setuptools:
2 wget https://files.pythonhosted.org/packages/6e/9c/6a003320b00ef237f94aa74e4ad66c57a7618f6c79d67527136e2544b728/setuptools-40.4.3.zip
3
4 解压缩:
5 unzip setuptools-40.4.3.zip
6
7 解压缩后,进入setuptools目录,安装setuptools:
8 cd setuptools-40.4.3
9 python setup.py build
10 python setup.py install
11
12 下载pip:
13 wget https://files.pythonhosted.org/packages/69/81/52b68d0a4de760a2f1979b0931ba7889202f302072cc7a0d614211bc7579/pip-18.0.tar.gz
14 解压缩:
15 tar -zxvf pip-18.0.tar.gz
16
17 解压缩后,进入pip目录,安装pip:
18 cd pip-18.0
19 python setup.py build
20 python setup.py install
10、自动化需要运行起来,首先需要在 centos 下安装虚拟桌面,目的是 python 去调用虚拟桌面接口


1 虚拟桌面安装:
2 yum install Xvfb
3
4 yum install gtk3
5
6 yum install libgtk-3.so.0
11、centos 虚拟桌面安装完成后,自动化代码需要在无桌面环境运行起来,此时 python 需要先去调用虚拟桌面接口


1 配置Python环境:
2 pip install xvfbwrapper //安装调用虚拟桌面接口
配置虚拟桌面接口完成后, 在自动化代码中,需要引用如下代码才能生效:
代码引用:
from xvfbwrapper import Xvfb
vdisplay = Xvfb(width=1280, height=740)
vdisplay.start()
try: # launch stuff inside virtual display here.
finally:
vdisplay.stop()
12、安装 selenium, 根据我的环境配置,安装对应版本的 selenium


pip install selenium==3.11
13、这一步,一定要注意,安装 Firefox, 前面 11 步都是在 Docker 容器中进行的,firefox 在虚拟机上进行安装


1 A下载firefoxdirver(这是WEBDRIVER):
2 wget https://github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-linux64.tar.gz
3
4 B解压缩:
5 tar -zxvf geckodriver-v0.21.0-linux64.tar.gz
6
7 C//将下载的driver放到python的交互式启动目录/usr/bin/下
8
9
10 D下载浏览器(这是浏览器,与WEBDRIVER是2个东西)
11 wget http://ftp.mozilla.org/pub/firefox/releases/62.0/linux-x86_64/
14、此时基本在容器中完成了自动化环境的配置,此时只需要 Docker commit 一个镜像


1 //查找容器ID
2 docker container ls [-a] //-a显示所有状态的容器,包括停止,-a是可选的,如果不加,只显示当前运行中的容器
3 //上面一步找到对应的容器ID,用commit命令可以生成一个镜像
4 docker commit 容器ID
谢谢大家~如有错误,请见谅,目前处于学习阶段~
Centos7上的Python Selenium / Geckodriver无法启动:无法找到匹配的功能集
如何解决Centos7上的Python Selenium / Geckodriver无法启动:无法找到匹配的功能集?
- Centos7
- Firefox 68.5.0esr(64位)
- Python 3.6.8
- 硒3.141.0
- Geckodriver 0.27.0(Linux 64位)
我正在尝试使用Selenium自动化对网站的一些测试,但是会收到此异常:
Traceback (most recent call last):
File "guitester.py",line 22,in <module>
browser = webdriver.Firefox(executable_path=gecko_path,firefox_binary=binary)
File "/home/ian/python3_venv/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py",line 174,in __init__
keep_alive=True)
File "/home/ian/python3_venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py",line 157,in __init__
self.start_session(capabilities,browser_profile)
File "/home/ian/python3_venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py",line 252,in start_session
response = self.execute(Command.NEW_SESSION,parameters)
File "/home/ian/python3_venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py",line 321,in execute
self.error_handler.check_response(response)
File "/home/ian/python3_venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py",line 242,in check_response
raise exception_class(message,screen,stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities
我的PATH中有geckodriver,并仔细检查了所有相关软件的版本。我的代码是基本的:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
gecko_path = ''/usr/local/bin/geckodriver''
binary = FirefoxBinary(''/usr/bin/firefox'')
browser = webdriver.Firefox(executable_path=gecko_path,firefox_binary=binary)
我已经尝试过使用webdriver.Firefox()包含和不包含的参数,并且两种方法都得到相同的异常。其他帖子提到了不正确的版本,但是我的研究表明我使用的所有内容都应该兼容。我正在使用python虚拟环境。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
FireFox中的Selenium OpenQA.Selenium.DriverServiceNotFoundException
我正在尝试开始编写Selenium测试,并且我编写的第一个非常基本的测试因exception失败OpenQA.Selenium.DriverServiceNotFoundException
。
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
namespace WebDriverDemo
{
class Program
{
static void Main(string[] args)
{
IWebDriver driver = new FirefoxDriver();
driver.Url = "http://www.google.com";
}
}
}
调试器说我需要下载geckodriver.exe并将其设置在我的PATH变量上,这已经完成,但仍然会出现相同的异常。当我对进行相同的操作时ChromeDriver
,效果很好。
同样,根据MDN,如果我使用的是Selenium
3.0或更高版本,则应默认启用它。我在Windows 10计算机上使用Selenium 3.0.1。
geckodriver.exe不在当前目录或路径变量中,Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta
看到了许多有关Selenium 2.53.1和Firefox 47.0.1的问题,但没有关于Selenium 3
Beta版本的问题。我正在尝试使用新的gecko / marionette Firefox
Webdriver,但是即使我在其中,也有该驱动程序的位置。在我的环境路径中,Firefox在程序中安装文件夹,并在系统环境中指定驱动器位置,它将仍然无法正常工作。
错误:
geckodriver.exe在当前目录或PATH环境变量上的目录中不存在。
该驱动程序可以从https://github.com/mozilla/geckodriver/releases下载。
使用:
- Selenium 2.53.1服务器
- Firefox 48
- selenium3 Beta DLL
- Windows 10
示例代码1
using OpenQA.Selenium.Firefox;
public static class FirefoxInitialise
{
public static IWebDriver Driver {get; set;}
Driver = new FirefoxDriver();
}
还尝试了以下操作:
using OpenQA.Selenium.Firefox;
public static class FirefoxInitialise
{
public static IWebDriver Driver {get; set;}
FirefoxDriverServices service = FirefoxDriverService.CreateDefaultService();
service.FirefoxBinaryPath = @"C:\Program Files\Mozilla Firefox\firefox.exe";
FirefoxOptions options = new FirefoxOptions();
TimeSpan time = TimeSpan.FromSeconds(10);
Driver = new FirefoxDriver(service,options,time);
}
对于代码为何仍无法检测到该驱动程序的任何帮助或见解,我们将不胜感激。
NoSuchWindowError:浏览上下文已被GeckoDriver Firefox和Protractor(Selenium)丢弃
我正在尝试使用量角器运行一个简单的测试脚本。
环境:
Node Version: v9.8.0Protractor Version: 5.4.1Angular Version: 1.xBrowser(s): Mozilla Firefox 60.1.0Operating System and Version: HELiOS release 6.10
这是我的量角器配置文件。
exports.config = { specs: [''todo-spec.js''], capabilities: { browserName: ''firefox'', marionette : true }};
这是我的测试脚本(todo-spec.js)
describe(''application homepage'', function() { it(''should open homepage'', function() { console.log("Opening localhost app"); browser.get(''http://localhost:8080/app/''); browser.sleep(20000); // just to check if application loaded or not });});
这是我的 node_modules / protractor / node_modules / webdriver-manager / selenium
/ 目录,如下所示:
使用进行测试时/path/to/protractor conf.js
,出现以下错误。
[16:51:03] I/launcher - Running 1 instances of WebDriver[16:51:03] I/local - Starting selenium standalone server...[16:51:04] I/local - Selenium standalone server started at http://<ip-address>:45089/wd/hubStartedOpening localhostFFailures:1) application homepage should open homepage Message: Failed: Browsing context has been discarded Build info: version: ''3.14.0'', revision: ''aacccce0'', time: ''2018-08-02T20:13:22.693Z'' System info: host: ''HOSTNAME'', ip: ''ip_address'', os.name: ''Linux'', os.arch: ''i386'', os.version: ''2.6.32-754.3.5.el6.x86_64'', java.version: ''1.8.0_181'' Driver info: driver.version: unknown Stack: NoSuchWindowError: Browsing context has been discarded Build info: version: ''3.14.0'', revision: ''aacccce0'', time: ''2018-08-02T20:13:22.693Z'' System info: host: ''HOSTNAME'', ip: ''ip_address'', os.name: ''Linux'', os.arch: ''i386'', os.version: ''2.6.32-754.3.5.el6.x86_64'', java.version: ''1.8.0_181'' Driver info: driver.version: unknown at Object.checkLegacyResponse (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/error.js:546:15) at parseHttpResponse (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/http.js:509:13) at doSend.then.response (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/http.js:441:30) at <anonymous> at process._tickCallback (internal/process/next_tick.js:118:7) From: Task: Protractor.get(http://localhost:8080/app/) - reset url at thenableWebDriverProxy.schedule (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/webdriver.js:807:17) at ProtractorBrowser.executeScriptWithDescription (/export/home/test/protractor_test_2/node_modules/protractor/built/browser.js:404:28) at driver.controlFlow.execute.then.then.then (/export/home/test/protractor_test_2/node_modules/protractor/built/browser.js:679:25) at ManagedPromise.invokeCallback_ (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/promise.js:1376:14) at TaskQueue.execute_ (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/promise.js:3084:14) at TaskQueue.executeNext_ (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/promise.js:3067:27) at asyncRun (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/promise.js:2927:27) at /export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/promise.js:668:7 at <anonymous> at process._tickCallback (internal/process/next_tick.js:118:7) From: Task: Run it("should open homepage") in control flow at UserContext.<anonymous> (/export/home/test/protractor_test_2/node_modules/jasminewd2/index.js:94:19) From asynchronous test: Error at Suite.<anonymous> (/export/home/test/protractor_test_2/todo-spec.js:2:3) at Object.<anonymous> (/export/home/test/protractor_test_2/todo-spec.js:1:63) at Module._compile (module.js:649:30) at Object.Module._extensions..js (module.js:660:10) at Module.load (module.js:561:32) at tryModuleLoad (module.js:501:12)1 spec, 1 failureFinished in 0.159 seconds[16:51:06] I/local - Shutting down selenium standalone server.[16:51:06] I/launcher - 0 instance(s) of WebDriver still running[16:51:06] I/launcher - firefox #01 failed 1 test(s)[16:51:06] I/launcher - overall: 1 failed spec(s)[16:51:06] E/launcher - Process exited with error code 1
任何帮助,将不胜感激。
答案1
小编典典可以使用以下配置解决此问题。
- Protractor: v5.4.1 - Selenium JAR driver: selenium-server-standalone-3.141.59.jar - geckodriver:geckodriver-v0.20.0-linux64
另外,我们需要在量角器conf文件中提供geckodrvier的路径。
geckoDriver: ''node_modules/protractor/node_modules/webdriver-manager/selenium/geckodriver-v0.20.0''
默认情况下,webdriver-
manager将下载geckodriver的最新版本为0.24.0。但是所需的geckdriver是v0.20.0,因此我手动下载了它,并将其放置在node_modules
/ protractor / node_modules / webdriver-manager / selenium /目录中。
希望这对面临类似问题的人们有所帮助。
今天关于在 Centos7 下 docker 配置自动化环境镜像 (python3.7+selenium 3.11+firefox 62+geckodriver 0.21)的分享就到这里,希望大家有所收获,若想了解更多关于Centos7上的Python Selenium / Geckodriver无法启动:无法找到匹配的功能集、FireFox中的Selenium OpenQA.Selenium.DriverServiceNotFoundException、geckodriver.exe不在当前目录或路径变量中,Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta、NoSuchWindowError:浏览上下文已被GeckoDriver Firefox和Protractor(Selenium)丢弃等相关知识,可以在本站进行查询。
本文标签: