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

selenium grid分布式

selenium grid环境在很多实体电脑上可以实现,如果我们没有那么多电脑,就需要利用docker来完成selenium grid环境搭建

一、环境搭建

  1. 创建一个docker网络
    docker network create grid
  2. 完成中心的搭建
  • 拉取镜像
    docker pull selenium/hub:4.10
  • 启动镜像
    docker run -d -p 4442-4444:4442-4444 --network grid --name shub -v
    /etc/localtime:/etc/localtime:ro --privileged=true selenium/hub:4.10
  • 启动成功后,浏览器访问(http://ip:4444/ui)

     3.完成chrome节点搭建

  • 拉取镜像
    docker pull selenium/node-chrome:4.10
  • 启动镜像
    docker run -d -p 7900:7900 --network grid -e SE_EVENT_BUS_HOST=shub --
    shm-size="2g" -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e
    SE_EVENT_BUS_SUBSCRIBE_PORT=4443 --name chrome -v
    /etc/localtime:/etc/localtime:ro --privileged=true selenium/nodechrome:4.10
  • 可以通过下面的链接打开docker容器浏览器可视化界面
    http://ip:7900/?autoconnect=1&resize=scale&password=secret

     4.完成selenium gird的框架修改

class DriverOperate:
    # 利用类属性定一个全局核心操作对象,他的赋值未来必须在conftest里完成
    globalDriverOperate=None
    # 这个类将会封装我们所有的核心操作
    # 在之后我们的这个框架,将会调用该类提供的各种动作来实现操作
    def __init__(self,browser='chrome',remote_url=None):
        self.logger = GetLogger.get_logger()
        self.browser = browser.lower()
        if remote_url:
            # 要用selenium grid方式运行
            if self.browser == 'chrome':
                options = webdriver.ChromeOptions()

            elif self.browser == 'firefox':
                options = webdriver.FirefoxOptions()

            elif self.browser == 'ie':
                options = webdriver.IeOptions()

            elif self.browser == 'edge':
                options = webdriver.EdgeOptions()

            elif self.browser == 'safari':
                options = webdriver.safari.options.Options()

            else:
                self.logger.error(f'{self.browser} 不支持')
                raise BaseException(f'{self.browser} 不支持')
            options.page_load_strategy='eager' # 表示页面加载较快
            self.driver = webdriver.Remote(remote_url,options=options)
        else:
            # 执行本地浏览器
            if self.browser == 'chrome':
                options = webdriver.ChromeOptions()
                self.driver = webdriver.Chrome(options=options)
            elif self.browser == 'firefox':
                options = webdriver.FirefoxOptions()
                self.driver = webdriver.Firefox(options=options)
            elif self.browser == 'ie':
                options = webdriver.IeOptions()
                self.driver = webdriver.Ie(options=options)
            elif self.browser == 'edge':
                options = webdriver.EdgeOptions()
                self.driver = webdriver.Edge(options=options)
            elif self.browser == 'safari':
                options = webdriver.safari.options.Options()
                self.driver = webdriver.Safari(options=options)
            else:
                self.logger.error(f'{self.browser} 不支持')
                raise BaseException(f'{self.browser} 不支持')
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
        self.logger.info(f'{self.browser} 启动成功')


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

相关文章:

  • 【每日八股】计算机网络篇(二):TCP 和 UDP
  • Kotlin中RxJava用法
  • 测试工程师的DeepSeek提效2:自动化测试应用
  • android TabLayout设置tab的时候文字默认居中,选中文字加粗
  • 微信小程序接入DeepSeek模型(火山方舟),并在视图中流式输出
  • PostgreSQL全页写机制深度解析:如何平衡WAL性能与数据可靠性
  • IDEA Tab 页设置多行显示
  • Docker + Vue2 热重载:为什么需要 CHOKIDAR_USEPOLLING=true?
  • 23种设计模式之工厂方法模式(Factory Method Pattern)【设计模式】
  • 频谱泄露与加窗
  • 代码规范和简化标准
  • Java零基础入门笔记:(6)面向对象
  • Cherno C++ P60 为什么不用using namespace std
  • react 19版中路由react-router-dom v7版的使用
  • MySQL学习笔记(2)并发问题与事务隔离级别
  • kettle插件-git/svn版本管理插件
  • 实战 Elasticsearch:快速上手与深度实践-2.2.2线程池配置与写入限流
  • 乡村研学旅行小程序(论文源码调试讲解)
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-附录A-ES2018 和 ES2019
  • 芯麦GC1272与茂达APX9172驱动芯片技术对比及替代方案解析 ——以电脑散热风扇、工业风机及智能设备场景为例