简介

使用selenium-grid可以远程执行测试的代码,核心步骤:grid --》 server--》chromedriver驱动 --》chrome浏览器

利用Selenium Grid可以使主节点(hub)的测试用例在不同主机即分支点(node)运行。可以使一份测试用例在不同环境下(操作系统、浏览器)执行自动化测试。串行,非并行。

版本

Grid1和2的原理和基本工作方式都是一样的,只是小的功能和易用性上进行了优化,例如指定测试平台的方式等。

Selenium Grid1 --> Selenium 1

Selenium Grid2 --> Selenium 1 2 3

Grid1是单独的包,Grid2已集成到Selenium Sever中,所以需要下载和运行Selenium Server才可以使用Grid2的功能。

运行条件

1、下载selenium-server-standalone-xxx.jar

2、配置Java环境

3、打开cmd(或linux终端),在selenium-server-standalone-xxx.jar文件目录下输入: java -jar selenium-server-standalone-xxx.jar 执行此jar包文件

Selenium Grid工作原理

Grid是用于设计帮助我们进行分布式测试的工具,整个结构是由一个hub主节点和若干个node代理节点组成。

hub用来管理各个代理节点的注册和状态信息,并且接收远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。使用Grid远程执行测试代码与直接调用Selenium Server是一样的,只是环境启动的方式不一样,需要同时启动一个hub,一个node。

<步骤>

1. 先在终端启动一个hub:(例如本地主机IP:198.127.1.100)

  java -jar selenium-server-standalone-xxx.jar -role hub -port 4444  ——hub是管理,默认端口号为4444

2. 再启动若干个node:(至少启动一个node,因为hub不执行测试用例,全靠node)

  java -jar selenium-server-standalone-xxx.jar -role node -port 5555 http://198.127.1.100:4444/grid  ——node是小工,默认端口号是5555

  java -jar selenium-server-standalone-xxx.jar -role node -port 6666

......

若指定hub分配,执行顺序:由端口连接先后,一个线程一次一个端口,轮流执行,轮流完毕又从头开始。

3. 然后,通过浏览器打开http://127.0.0.1:4444/grid/console/  访问Grid的控制台,可以查看启动受控的节点node信息。

4. 执行代码 (参数化平台与浏览器)

 from selenium.webdriver import Remote
# 指定node主机与浏览器为字典,主键不能重复
dic = {'http://127.0.0.1:5555/wd/hub':'chrome',
'http://127.0.0.1:6666/wd/hub':'firefox',
'http://198.127.1.13:5555/wd/hub':'internet explorer'
}
# 循环不同的浏览器执行脚本
for host,browser in dic.items():
print(host,browser)
dr = Remote(command_executor=host,
desired_capabilities={'platform':'ANY',
'browserName':browser,
'version':'',
'javascriptEnabled':True})
# 执行用例
dr.get("http://www.baidu.com/")
dr.find_element_by_id("kw").send_keys("selenium grid")
dr.find_element_by_id("su").click()
dr.quit()
print("OK")

<注意>

启动远程节点需要满足的条件:

1. 两平台相互ping通

2. 远程节点java/selenium-server启动受控

3. 具备相关的浏览器,否则会被拒绝

Remote应用

remote类可以启动server且指定不同ip和端口(grid=运行多平台多浏览器)

解释:

  • 由selenium包的代码可知,selenium/webdriver/__init__.py得知引用的WebDriver类的真实目录
from .chrome.webdriver import WebDriver as Chrome

  • 然后由selenium/webdriver/chrome/webdriver.py得知
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
class WebDriver(RemoteWebDriver):
def __init__(self, executable_path="chromedriver", port=0,
chrome_options=None, service_args=None,
desired_capabilities=None, service_log_path=None):
  • Chrome的webdriver类也是继承了selenium.webdriver.remote.webdriver.py文件中的WebDriver类,所以打开此目录
class WebDriver(object):
_web_element_cls = WebElement
def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=None, browser_profile=None, proxy=None,
keep_alive=False, file_detector=None):
  • 由remote的WebDriver类中得知desired_capabilities(浏览器配置)必须不为空,输入格式为字典。

  -浏览器的配置由desired_capabilities参数决定,这个参数的秘密再selenium包的webdriver/common目录下的desired_capabilities.py文件中

CHROME = {

"browserName": "chrome",  #浏览器
"version": "",        #浏览器版本号
"platform": "ANY",    #测试平台

 "javascriptEnabled": True,  #Js启动状态

  }

所以从Remote()方法配置来看,它相当于我们直接使用webdriver.Chrome(),但是Remote()却大大增加了配置的灵活性。(请看上面执行代码)

总结:个人理解,remote是早期selenium1便存在,后来webdriver是继承了它也重写了它。所以早期remote是通过RC执行脚本,不需要驱动;但现在到selenium3,只存在webdriver那样的工作方式。

所以曾在selenium1合并过来的grid --》 server--》chromedriver驱动 --》chrome浏览器,也是用webdriver工作方式在跑。

Selenium Grid2的更多相关文章

  1. Python+selenium之selenium Grid2

    利用selenium grid2 keyi可以在不同的主机上建立主节点(hub)和分支节点(node),可以使主节点上的测试用例在不同的分支节点上运行.对不同的节点来说,可以搭建不同的测试环境(操作系 ...

  2. 9、Selenium grid2

    P228--Selenium Grid2 P233--Selenium Grid 工作原理 P236--Remote 应用 P246--WebDriver 驱动 driver = webdriver. ...

  3. selenium Grid2 分布式自动化测试环境搭建

    一.Selenium Server 环境配置 1.selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的 ...

  4. selenium grid2 使用远程机器的浏览器

    下载 selenium-server-standalone-3.4.0.jar包 在selenium-server-standalone-3.4.0.jar包目录下面执行cmd 命令 java -ja ...

  5. selenium Grid2环境搭建和基本使用

    Selenium Grid简介 利用Selenium Grid可以使主节点(hub)的测试用例在不同主机即分支点(node)运行.可以使一份测试用例在不同环境下(操作系统.浏览器)执行自动化测试.Se ...

  6. Selenium WebDriver + Grid2 + RSpec之旅(二)----Grid2的配置

    Selenium WebDriver + Grid2 + RSpec之旅(二) ----Grid2的配置 为什么要使用Selenium-Grid 分布式运行大规模的TestCase 能够通过一个中央节 ...

  7. Selenium WebDriver + Grid2 + RSpec之旅(一)----准备篇

    Selenium WebDriver + Grid2 + RSpec之旅(一)             ----准备篇 前言 在Web 2.0 应用中,在浏览器种类盛行的时代,我们在测试过程中不仅要模 ...

  8. Robot Framework和Selenium 2 Grid集成指南

    1. 环境搭建 A. 所需软件 1. Selenium2Lib 1.0.1 这个特性需要用到Selenium2Lib的最新版本1.0.1,但是这个版本还有一些iframe支持和IE支持的问题需要修改, ...

  9. Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通

    Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通Selenium接口性能自动化测试基础部分:分层自动化思想Slenium介绍Selenium1.0/2.0/3.0Slenium R ...

随机推荐

  1. html中DTD

    DTD 是一套关于标记符的语法规则.它是XML1.0版规格得一部分,是html文件的验证机制,属于html文件组成的一部分. DTD:三种文档类型:Strict(严格的).Transitional(过 ...

  2. Spring框架(6)---AspectJ实现AOP

    AspectJ实现AOP 上一篇文章Spring框架(4)---AOP讲解铺垫,讲了一些基础AOP理解性的东西,那么这篇文章真正开始讲解AOP 通过AspectJ实现AOP要比普通的实现Aop要方便的 ...

  3. Java代码审查工具findbugs的使用总结

    findbugs简介 Findbugs是一个Java代码静态分析工具,可以用它来检查源代码中可能出现的问题,以期尽可能在项目的初始阶段将代码问题解决. FindBugs检查的是类或者JAR文件即字节代 ...

  4. Archlinux 的U盘自动装载(三)udevil

    U盘的自动装载方法,目前我已经使用过以下几种方法: udev 规则 基于 udev 规则的 Shell script udisks 以及 udisks2 结果,总是存在这样那样的小问题.例如,文件名乱 ...

  5. 【js数据结构】栈解决佩兹糖果盒问题

    现实生活中栈的一个例子是佩兹糖果盒. 想象一下你有一盒佩兹糖果, 里面塞满了红色. 黄色和白色的糖果, 但是你不喜欢黄色的糖果. 使用栈( 有可能用到多个栈) 写一段程序, 在不改变盒内其他糖果叠放顺 ...

  6. 爬取软考试题系列之ip自动代理

    马上5月份有个软件专业等级考试,以下简称软考,为了更好的复习备考,我打算抓取www.rkpass.com网上的软考试题. 以上为背景. 很久没有更新博客园的博客了,所以之前的代码没有及时的贴出来,咱们 ...

  7. java中String s = new String("abc")创建了几个对象?

    答案是两个,现在我们具体的说一下: String s = new String("abc");一.我们要明白两个概念,引用变量和对象,对象一般通过new在堆中创建,s只是一个引用变 ...

  8. 提问!同一ajax请求获取的图片路劲,在谷歌浏览器能正确展示图片,在火狐浏览器则显示路径undefined

    今天的工作学习之路遇见一个奇葩的问题,作为初级攻城狮的小生实在不知如何解决,都已经壁咚度娘一整天了,都未能解决问题,实属无奈,一开始认为是浏览器兼容的问题,但左看右看,也不是,也尝试过是不是页面加载与 ...

  9. Spring报错——Scope 'session' is not active for the current thread

    在对程序进行了一些修改后,运行发现spring报了这个错误,这是由于我设置了一个@Scope("session")导致的,现记录下解决方法. 解决方法: 将Scope设置为scop ...

  10. windows phone 8.1开发:触控和指针事件1

    原文出自:http://www.bcmeng.com/windows-phone-touch/ UIElement类的触控事件: ManipulationStarting:当用户将手指放在 IsMan ...