• selenium源码通读·9 |DesiredCapabilities类分析


    1 源码目录

    selenium/webdriver/common/desired_capabilities.py
    
    • 1

    2 功能描述

    根据测试代码中配置的DesiredCapabilities参数,来决定将测试代码分发到哪台node上进行测试;
    补充知识:我们需要了解下selenium grid;

    3 Selenium Grid介绍

    3.1 是什么?

    Selenium套件的一部分,它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上;

    Selenium Grid 主要使用 master-slaves (or hub-nodes) 理念 ,是一个 master/hub 和多个基于master/hub注册的子节点 slaves/nodes;

    在master上基于不同的浏览器/系统运行测试用例时,master将会分发给适当的node运行;图片

    3.2 什么时候用?

    同时在不同的浏览器、操作系统和机器上运行测试;

    用于兼容性测试;

    减少运行时间。

    3.3 怎么用?

    启动Selenium Grid的三种方式,一种直接用命令行,另一种用JSON配置文件,最后一种docker启动。

    3.3.1 命令行启动

    简单说下步骤,详细的请查阅其他资料,运行hub机器为A,运行node机器为B。

    配置Java环境;

    浏览器;

    浏览器对应的driver;

    下载selenium server,将selenium-server-standalone-3.141.59.jar,机器A和机器B上;

    机器A上打开命令行,进入selenium server目录下,运行:

    ava -jar selenium-server-standalone-3.141.59.jar -role hub -port 5566
    
    • 1

    浏览器输入http://localhost:5566/grid/console ;
    机器B上打开命令行,进入selenium server目录下,运行:

    java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.100:5566/grid/register/ -port 5577
    
    • 1

    刷新http://localhost:5566/grid/console ;

    运行测试脚本,将会看到在机器B上打开了Chrome浏览器,并会运行测试用例。

    3.3.2 Json配置文件启动

    创建hub的Json配置文件;

    {
      "port": 4444,
      "newSessionWaitTimeout": -1,
      "servlets" : [],
      "withoutServlets": [],
      "custom": {},
      "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
      "registry": "org.openqa.grid.internal.DefaultGridRegistry",
      "throwOnCapabilityNotPresent": true,
      "cleanUpCycle": 5000,
      "role": "hub",
      "debug": false,
      "browserTimeout": 0,
      "timeout": 1800
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    以上代码保存为hub_config.json文件,放在 机器A上和selenium server相同的路径下;
    创建nodes的 Json配置文件;

    {
      "capabilities":
      [
        {
          "browserName": "firefox",
          "marionette": true,
          "maxInstances": 5,
          "seleniumProtocol": "WebDriver"
        },
        {
          "browserName": "chrome",
          "maxInstances": 5,
          "seleniumProtocol": "WebDriver"
        },
        {
          "browserName": "internet explorer",
          "platform": "WINDOWS",
          "maxInstances": 1,
          "seleniumProtocol": "WebDriver"
        },
        {
          "browserName": "safari",
          "technologyPreview": false,
          "platform": "MAC",
          "maxInstances": 1,
          "seleniumProtocol": "WebDriver"
        }
      ],
      "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
      "maxSession": 5,
      "port": -1,
      "register": true,
      "registerCycle": 5000,
      "hub": "http://这里是机器A的ip:4444",
      "nodeStatusCheckTimeout": 5000,
      "nodePolling": 5000,
      "role": "node",
      "unregisterIfStillDownAfter": 60000,
      "downPollingLimit": 2,
      "debug": false,
      "servlets" : [],
      "withoutServlets": [],
      "custom": {}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    保存为node_config.json文件,放在机器B上和selenium server相同的路径下;

    机器A,运行:

    java -jar selenium-server-standalone-3.141.59.jar -role hub -hubConfig hub_config.json
    
    • 1

    机器B,运行:

    java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node_config.json
    
    • 1

    3.3.3 docker启动

    安装docker;

    启动hub:

    docker run -d -p 4444:4444 --name selenium-hub selenium/hub
    
    • 1

    启动node,比如chrome浏览器;

    docker run -d --link selenium-hub:hub selenium/node-chrome
    
    • 1

    访问:http://localhost:4444/grid/console;

    运行多个node:

    docker run -d --link selenium-hub:hub selenium/node-chrome
    
    • 1

    关闭docker-grid的命令:

    docker stop $(docker ps -a -q), docker rm $(docker ps -a -q)
    
    • 1

    注意,特别说明:关于Selenium Grid的内容参考与https://blog.csdn.net/lb245557472/article/details/91966770

    4 部分源码说明

    class DesiredCapabilities(object):
        """
        Set of default supported desired capabilities.
    
        Use this as a starting point for creating a desired capabilities object for
        requesting remote webdrivers for connecting to selenium server or selenium grid.
    
        Usage Example::
    
            from selenium import webdriver
    
            selenium_grid_url = "http://198.0.0.1:4444/wd/hub"
    
            # Create a desired capabilities object as a starting point.
            capabilities = DesiredCapabilities.FIREFOX.copy()
            capabilities['platform'] = "WINDOWS"
            capabilities['version'] = "10"
    
            # Instantiate an instance of Remote WebDriver with the desired capabilities.
            driver = webdriver.Remote(desired_capabilities=capabilities,
                                      command_executor=selenium_grid_url)
    
        Note: Always use '.copy()' on the DesiredCapabilities object to avoid the side
        effects of altering the Global class instance.
    
        """
    
        FIREFOX = {
            "browserName": "firefox",
            "marionette": True,
            "acceptInsecureCerts": True,
        }
    
        INTERNETEXPLORER = {
            "browserName": "internet explorer",
            "version": "",
            "platform": "WINDOWS",
        }
    
        EDGE = {
            "browserName": "MicrosoftEdge",
            "version": "",
            "platform": "WINDOWS"
        }
    # 剩下的源码省略
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    从源码看,下边均对浏览器系统等的说明:

    browserName:浏览器
    version:操作系统版本
    platform:操作系统
    
    • 1
    • 2
    • 3

    我推荐一个【Python自动化测试交流群:746506216】,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,助你快速进阶Python自动化测试/测试开发,走向高薪之路。

    喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

  • 相关阅读:
    Pandas常用操作命令(七)——表格样式
    Git学习笔记 - 搭建GitLab服务器与Idea集成GitLab
    安装配置HBase
    内网渗透系列之Pivoting跳板攻击与自动路由的配置以及使用ProxyChains进行代理扫描并获取内网服务器权限
    电脑数据恢复怎么操作?电脑数据恢复难点是什么
    嵌入式养成计划-32-网络编程----域套接字模型------抓包工具--wireshark
    RabbitMQ简介及在Linux中安装部署(yum)
    如何强化九小场所安全检查隐患排查工作
    【开源电路】STM32F103VCT6开发板
    【算法】二分查找-20231121
  • 原文地址:https://blog.csdn.net/m0_67695717/article/details/125608973