当前位置: 首页 > article >正文

高效自动化测试框架-优秀实践03-使用SeleniumGrid

高效自动化测试框架-优秀实践03-使用SeleniumGrid

Docker安装

  1. 切换管理权限 su root

  2. 安装Docker依赖 yum install -y yum-utils device-mapper-persistent-data lvm2

  3. 配置依赖下载源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  4. 安装docker yum makecache fast && yum -y install docker-ce

  5. 检查docker状态为loaded

    systemctl status docker

    systemctl start docker

SeleniumServer安装

实际上可以使用jar包安装,docker方式安装,k8s方式安装,考虑到直接jar包安装不稳定,k8s相对复杂,那就直接docker安装好了

使用 Hub 与 Node 分工的方式启动 Grid 的 Docker 命令如下:

# 创建网络
docker network create grid
​
# 启动 Hub
docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.4.0
​
# 启动一个 Chrome Node
docker run -d -p 7900:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
    --shm-size="2g" \
    -e SE_EVENT_BUS_PUBLISH_PORT=4442 \
    -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
    selenium/node-chrome:4.4.0

还可以按需添加别的浏览器 Node,如下命令添加了 Edge 和 Firefox Node。

# 添加一个 Edge Node
docker run -d -p 7901:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
    --shm-size="2g" \
    -e SE_EVENT_BUS_PUBLISH_PORT=4442 \
    -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
    selenium/node-edge:4.4.0
​
# 添加一个 Firefox Node
docker run -d -p 7902:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \
    --shm-size="2g" \
    -e SE_EVENT_BUS_PUBLISH_PORT=4442 \
    -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \
    selenium/node-firefox:4.4.0

实际的调用代码

from selenium import webdriver
from config.selenium_grid import *
from selenium.webdriver import Firefox, Chrome, FirefoxProfile, ChromeOptions
​
​
class WebDriver:
    def __init__(self):
        self.web_driver = None
        pass
​
    def get_web_driver(self):
        # 判断是否需要使用remote的driver
        if use_selenium_grid:
            # TODO 需要对获取不到driver的情况做异常处理
            self.web_driver = webdriver.Remote(
                # selenium_grid_command_executor = 'http://192.168.0.105:4444'
                command_executor=selenium_grid_command_executor,
                options=webdriver.ChromeOptions()
            )
        else:
            # 初始化本地的web_driver
            self._init_chrome()
        return self.web_driver
​
    def _init_firefox(self):
        profile = FirefoxProfile()
        self.web_driver = Firefox(profile)
​
    def _init_chrome(self):
        options = ChromeOptions()
        config = dict()
        config['profile.default_content_settings.popups'] = 0
        print("options", options)
        self.web_driver = Chrome(options=options)
​

上面的代码中,会去读取配置,如果配置中需要使用selenium_grid, 则低啊用selenium_grid的driver,否则直接初始化本地的web_driver

安装命令参考

序号安装场景安装命令
1jar包方式_standalone模式java -jar selenium-server-<version>.jar standalone
2jar包方式_使用 Hub 与 Node 分工的方式来启动 Grid# 启动 Hub java -jar selenium-server-<version>.jar hub # 启动 Node 1 java -jar selenium-server-<version>.jar node --port 5555 # 启动 Node 2 java -jar selenium-server-<version>.jar node --port 6666
3Docker方式_Standalone 模式# 启动一个 Chrome Standalone Grid docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" selenium/standalone-chrome:4.4.0
4Docker方式_使用 Hub 与 Node 分工的方式来启动# 创建网络 docker network create grid # 启动 Hub docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.4.0 # 启动一个 Chrome Node docker run -d -p 7900:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \ --shm-size="2g" \ -e SE_EVENT_BUS_PUBLISH_PORT=4442 \ -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \ selenium/node-chrome:4.4.0
5Docker方式增加Node# 添加一个 Edge Node docker run -d -p 7901:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \ --shm-size="2g" \ -e SE_EVENT_BUS_PUBLISH_PORT=4442 \ -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \ selenium/node-edge:4.4.0 # 添加一个 Firefox Node docker run -d -p 7902:7900 --net grid -e SE_EVENT_BUS_HOST=selenium-hub \ --shm-size="2g" \ -e SE_EVENT_BUS_PUBLISH_PORT=4442 \ -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 \ selenium/node-firefox:4.4.0

具体的项目地址

https://github.com/WaterLoran/LoranTest

待改进的地方

  1. 获取web_driver失败的时候,需要做异常处理

  2. 期望增加装饰器,支持在用例层面设置使用本地还是远端的driver

  3. 所调用的selenium_grid中的web_driver启动非常慢,并且页面比较小,和本地的浏览器不一样,需要做额外的处理

参考博客地址: Selenium Grid 搭建及使用 - 磊磊落落


http://www.kler.cn/a/8142.html

相关文章:

  • linux-19 根文件系统(一)
  • JAVA HTTP压缩数据
  • 京东零售数据可视化平台产品实践与思考
  • Jenkins 任意文件读取(CVE-2024-23897)修复及复现
  • vue3入门教程:ref函数
  • 【uni-app】2025最新uni-app一键登录保姆级教程(包含前后端获取手机号方法)(超强避坑指南)
  • unity,欧拉角
  • HashMap源码分析小结
  • python好玩的短代码
  • 不负期待,载誉收官 | 迅镭激光2023ITES深圳展圆满落幕!
  • 轻轻松松编译 Jmeter 源码,再也不求人
  • Leetcode.130 被围绕的区域
  • 继承(C++)
  • Spring-aop面向切面
  • Tomcat使用https配置实战
  • chatGPT中国入口-ChatGPT评论文章-ChatGPT怎么用
  • 多线程冲突处理方法,锁
  • 首届“兴智杯”产业赛收官,文心大模型助推产业创新
  • 量化注意事项和模型设计思想
  • rsync远程同步实现快速、安全、高效的异地备份
  • Spring 之循环依赖
  • 【计算机网络-网络层】路由选择协议
  • Redission分布式锁
  • vue3脚手架Vite
  • ChatGPT常用prompts汇总
  • springboot感受优化06