GVKun编程网logo

在 Centos7 下 docker 配置自动化环境镜像 (python3.7+selenium 3.11+firefox 62+geckodriver 0.21)

8

本篇文章给大家谈谈在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 下 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
拉一个纯净版的 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
centos 找到对应的 image id

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

1 docker run -it 5182 bash
运行 image id,进入 docker 容器

 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
安装 python 前需要安装的各种依赖

5、centos 这个系统是很干净的,并没有安装 wget,如果需要对其他应用进行安装,需要先安装 wget,再对其他应用进行安装

1 yum -y install wget
安装 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"
进入 LibreSSL 安装目录,配置文件

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 
下载 python3.7.0 并安装

8、由于后续安装 setuptools、pip 有其他的压缩包,比如 unzip

安装 zip 压缩包:

1 yum install -y unzip zip
安装 unzip

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
安装 setuptools、pip

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   //安装调用虚拟桌面接口
python 环境,配置虚拟桌面接口

配置虚拟桌面接口完成后, 在自动化代码中,需要引用如下代码才能生效:

代码引用:
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
安装 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
查找容器 ID 生成镜像

 

谢谢大家~如有错误,请见谅,目前处于学习阶段~

 

Centos7上的Python Selenium / Geckodriver无法启动:无法找到匹配的功能集

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

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

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)丢弃

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)丢弃等相关知识,可以在本站进行查询。

本文标签: