当前位置:网站首页>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自动化测试/测试开发,走向高薪之路。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!
边栏推荐
- The difference and usage between continue and break
- Software test interview questions - Test Type
- Buuctf-[[gwctf 2019] I have a database (xiaoyute detailed explanation)
- Application du Groupe Li dans gtsam
- C language bubble sort
- Baidu online AI competition - image processing challenge: the 8th program of handwriting erasure
- Sqlmap tutorial (III) practical skills II
- [Thesis code] SML part code reading
- Cognitive introspection
- Hongliao Technology: Liu qiangdong's "heavy hand"
猜你喜欢
[postman] test script writing and assertion details
[course notes] Compilation Principle
数学三大核心领域概述:代数
How Huawei routers configure static routes
功能安全之故障(fault),错误(error),失效(failure)
What are the test sites for tunnel engineering?
单元测试的意义
LeetCode 1200. 最小绝对差
【Postman】测试(Tests)脚本编写和断言详解
Usage of test macro of GTEST
随机推荐
Seven imperceptible truths in software testing
Fault, error, failure of functional safety
SQLMAP使用教程(三)实战技巧二
Huawei BFD configuration specification
进程和线程的理解
Accélération de la lecture vidéo de l'entreprise
【C语言】qsort函数
[postman] collections configuration running process
Report on the competition status and investment decision recommendations of Guangxi hospital industry in China from 2022 to 2028
C language learning notes (mind map)
(5) Explanation of yolo-v3 core source code (3)
【微信小程序】搭建开发工具环境
The difference and usage between continue and break
IDEA 新UI使用
【Postman】动态变量(也称Mock函数)
What are the test sites for tunnel engineering?
[paper reading] nflowjs: synthetic negative data intensive anomaly detection based on robust learning
[untitled]
Hongliao Technology: how to quickly improve Tiktok store
Memory and stack related concepts