zoukankan      html  css  js  c++  java
  • Docker Selenium

    SeleniumHQ官方项目:https://github.com/seleniumHQ/docker-selenium
    项目目前快速迭代中。


    ###Docker

    一般叫docker容器,一个可爱的鲸鱼,上面坨着集装箱。先来搞清楚它里面的几个概念。

    • Docker镜像,运行Docker容器的一个环境。

    • Docker容器,简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。 如果把镜像看成面向对象中的 “类” 的话,那么容器就是“类”的实例化“ 对象”。

    • Docker仓库,存放Docker镜像的仓库。作用和GitHub类似。


    ### 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 ps -a
    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、查看截图

    百度页面是被渲染出来了,但中文有乱码。

  • 相关阅读:
    mklink让网盘同步不同文件夹
    WINDOWS 的 MKLINK : 硬链接,符号链接 : 文件符号链接, 目录符号链接 : 目录联接
    Dropbox Folder Sync – 让 Dropbox 同步任意文件夹
    Tasker : Scale Up/Down CPU Speed at Different Times
    Tasker : Task / Shortcut Widgets
    Automate Screen or Button Taps via Tasker : Simulating keypress events
    Solution for sending Whatsapp via sqlite "INSERT INTO"
    SQL Server复制出错文章集锦
    SQL Server 2016 CTP2.2 的关键特性
    SQL Server表分区的NULL值问题
  • 原文地址:https://www.cnblogs.com/fnng/p/8358326.html
Copyright © 2011-2022 走看看