Selenium Grid兼容性测试(Python版)

Selenium Grid是什么?
Selenium Grid是Selenium套件的一部分,它专门用于在不同的浏览器、操作系统和机器上并行运行多个测试。
Selenium Grid有两个版本——旧的Grid1和新的Grid2。我们只关注Grid2,因为Grid 1逐渐被Selenium团队所弃用。

Selenium Grid使用了一个hub节点的概念,在这个概念中,您只在一个名为hub的机器上运行测试,但是执行将由不同的称为Node(就是节点)的机器来执行。

什么时候使用Selenium Grid?
当您想要执行以下操作时,您应该使用Selenium Grid:
在不同的浏览器、操作系统和机器上运行您的测试。这将确保您测试系统兼容性的环境的完全覆盖。
在测试套件的执行中节省时间。如果您设置了Selenium Grid,每次运行4个测试,那么您将能够以快4倍的速度完成整个套件。有利于更快的发现错误。

Selenium Grid体系结构
The Hub
hub是您将测试加载到其中的中心点。在部署的Grid中应该只有一个中心。
该中心仅在一台计算机上启动,例如一台计算机。S是Windows 7,它的浏览器是IE。包含Hub的机器是测试运行的地方,但是您将看到浏览器在Node上是自动的。
The Node
Node是将执行您在中心上加载的测试的Selenium实例。
Grid中可以有一个或多个Node。
可以在具有不同平台和浏览器的多台机器上启动Node。
运行Node的机器不需要与Hub相同的平台。

如何设置Selenium Grid?
先从一个简单的例子开始,您将使用2台机器。第一个机器将是运行该Hub的系统,而另一台机器将运行一个Node。为简单起见,让我们将Hub运行的机器称为“机器A”,而Node运行的机器将是“机器b”。同样重要的是要注意他们的IP地址。

假设机器A具有192.168.1.3的IP地址,而机器B的IP地址为192.168.1.4。

  1. 下载Selenium Server by here.

  2. 放置Selenium Server
    jar文件下载后可以放在您的硬盘中任何地方。但是为了方便,都将它放在机器A和机器B的C驱动器上,完成之后,您就完成了安装Selenium Grid的工作。以下步骤将启动该Hub和Node。

  3. 启动Selenium Server
    我们现在要启动一个Hub。使用命令提示符,导航到机器A的C驱动器的根目录,因为这是我们放置Selenium服务器的目录。
    在命令提示符中,键入:
    $java -jar selenium-server-standalone-2.53.1.jar -role hub
    成功启动后,您的命令提示符应该与下面的图像类似:

Selenium server.png

如果出现以下错误,则表示你的端口被占用了,可以用以下命令进行修改:
$java -jar selenium-server-standalone-2.53.1.jar -role hub -port 5666(选取一个没有被占用的端口)


seleniumgridError.png

4.验证Hub是否正在运行
打开浏览器。在默认情况下,Selenium Grid使用机器A端口4444作为其web接口。打开一个浏览器,访问http://localhost:4444/grid/

Hub_Console.png

5 .设置好Hub后,启动一个Node。
在机器B的C盘根目录下输入以下命令:
提示符。
$java -D webdriver.gecko.driver="C:\geckodriver.exe" -jar selenium-server-standalone-2.53.1.jar -role node -hub http://192.168.1.3:4444/grid/register -port 5566

上面那个命令参数的含义如下:
-D 指调用的驱动指定的路径。
-jar 指需要使用的Jar包
-role 指此台机器的角色,是Hub还是Node
-hub 指明Hub机器的地址
-port 指明通信的端口号,可以选择您想要的任何免费的端口号。

链接成功后,在Node机器B上可能出现如下画面:

node_success.png

在Hub 机器A上出现以下的画面:

gridconsole.png

如果有多个Node链接的情况下,console上会出现多个节点的情况。

设计可以在Grid上运行的测试脚本
要设计将在Grid上运行的测试脚本,我们需要使用DesiredCapabilites和RemoteWebDriver对象。

  • DesiredCapabilites 是用来设置需要被测试的系统和浏览器的类型
  • RemoteWebDriver用于设置我们的测试将运行的哪个节点(或机器)。
    要使用这两个对象,您必须首先导入这个两个包:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

使用DesiredCapabilites对象
转到Grid的web界面,并在您想要自动化的浏览器的图像上停留。注意这个平台,浏览器名称显示在工具提示中。

ToolTip(1).png

我们将在WebDriver中使用这个平台(VISTA)和browserName(firefox),如下所示(当然,您首先需要导入必要的包)。

#指定运行主机与端口号

driver = webdriver.Remote(
   command_executor='http://机器B的ip:机器B的端口号/wd/hub',
   desired_capabilities=DesiredCapabilities.FIREFOX)

运行一个简单的例子在Node机器B上
可以写一个最简单的百度搜索的例子。

import time
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


#指定运行主机与端口号

driver = webdriver.Remote(
     command_executor='http://192.168.199.156:5566/wd/hub',
     desired_capabilities=DesiredCapabilities.FIREFOX)

driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("hello")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.close()

以上代码在Hub的机器A上运行后,可以在机器B上看到Firefox浏览器被打开,加载入百度搜索页面,输入关键词hello并搜索。

总结
Selenium Grid用于在不同的浏览器和平台上同时运行多个测试。
Grid使用了hub-node概念。
hub是您加载测试的中心点。node是将执行您在中心上加载的测试的Selenium实例。
要安装Selenium Grid,只需下载Selenium server jar文件来运行Selenium RC测试中使用的相同文件。
有两种方法来验证这个中心是否正在运行:一个是通过命令提示符,另一个是通过浏览器
要在Grid上运行测试脚本,您应该使用DesiredCapabilities 和RemoteWebDriver对象。

扩展:
如果你想在不同的系统和浏览器上启动的话,可以更改DesiredCapabilities 的设置,比如:

#浏览器数组
lists=['chrome','internet explorer','firefox']
#通过不同的浏览器执行脚本
for browser in lists:
  driver = webdriver.Remote(
        command_executor='http://127.0.0.1:4444/wd/hub',
      desired_capabilities={'platform': 'ANY',
      'browserName':browser,
      'version': '',
      'javascriptEnabled': True
})

在脚本的执行中我们就可以看到,第一次是启动chrome来执行,第二次是IE浏览器,第三次是firefox。
当然前提是你执行的机器上所有浏览器的驱动都安装到位且可以执行Selenium的自动化。


引用:
官方介绍文档:https://github.com/SeleniumHQ/selenium/wiki/Grid2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335