当前位置:网站首页>selenium源码通读·9 |DesiredCapabilities类分析
selenium源码通读·9 |DesiredCapabilities类分析
2022-07-06 06:07:00 【测试界的飘柔】
1 源码目录
selenium/webdriver/common/desired_capabilities.py
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
浏览器输入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
刷新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
}
以上代码保存为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": {}
}
保存为node_config.json文件,放在机器B上和selenium server相同的路径下;
机器A,运行:
java -jar selenium-server-standalone-3.141.59.jar -role hub -hubConfig hub_config.json
机器B,运行:
java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node_config.json
3.3.3 docker启动
安装docker;
启动hub:
docker run -d -p 4444:4444 --name selenium-hub selenium/hub
启动node,比如chrome浏览器;
docker run -d --link selenium-hub:hub selenium/node-chrome
访问:http://localhost:4444/grid/console;
运行多个node:
docker run -d --link selenium-hub:hub selenium/node-chrome
关闭docker-grid的命令:
docker stop $(docker ps -a -q), docker rm $(docker ps -a -q)
注意,特别说明:关于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"
}
# 剩下的源码省略
从源码看,下边均对浏览器系统等的说明:
browserName:浏览器
version:操作系统版本
platform:操作系统
我推荐一个【Python自动化测试交流群:746506216】,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,助你快速进阶Python自动化测试/测试开发,走向高薪之路。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!
边栏推荐
猜你喜欢
Expose the serial fraudster Liu Qing in the currency circle, and default hundreds of millions of Cheng Laolai
養了只小猫咪
Hypothesis testing learning notes
SQLMAP使用教程(三)实战技巧二
进程和线程的理解
[postman] collections - run the imported data file of the configuration
10M25DCF484C8G(FPGA) AMY-6M-0002 BGA GPS模块
Buuctf-[[gwctf 2019] I have a database (xiaoyute detailed explanation)
P问题、NP问题、NPC问题、NP-hard问题详解
GTSAM中李群的運用
随机推荐
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
进程和线程的理解
Introduction to promql of # yyds dry goods inventory # Prometheus
IP day 16 VLAN MPLS configuration
As3013 fire endurance test of cable distribution system
MIT6.s081-2020 Lab2 System Calls
MPLS test report
Buuctf-[[gwctf 2019] I have a database (xiaoyute detailed explanation)
假设检验学习笔记
曼哈顿距离和-打印菱形
How Huawei routers configure static routes
A complete collection of necessary learning websites for office programmers
把el-tree选中的数组转换为数组对象
Some easy-to-use tools make your essay style more elegant
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
【课程笔记】编译原理
Embedded point test of app
LeetCode 729. 我的日程安排表 I
Redis6 cluster setup
Coordinatorlayout+nestedscrollview+recyclerview pull up the bottom display is incomplete