相关文章推荐
安静的苦瓜  ·  selenium获取元素文本值·  1 月前    · 
阳光的充值卡  ·  How are booleans ...·  1 年前    · 

当你写的selenium的case数达到几十个之后,它的运行时间慢慢的可能就会成为你的一块心病——慢!

怎么办呢?很显然,最有效的降低运行时间就是并行来运行这些case啊。并行运行case需要两个条件,缺一不可。

1. 在运行case端,需要并行的运行。例如写一个多线程/多进程来同时运行多个case。
2. 在Selenium Server端,也要并行的打开多个浏览器窗口,并且各个浏览器窗口之间互不干扰

对于#1,如果是使用JUnit来运行cases,可以使用maven的一个插件: surefire
对于#2,selenium的解决方案是 Selenium Grid

在Selenium2.0之前,Selenium Grid是独立提供服务的。自2.0之后,Selenium Grid被集成到了Selenium Server中了(包含在selenium-server-standalone-.jar中)。

先理解一下Grid是如何工作的?一图胜千言:

Selenium Grid里面有两种角色:Hub和Node。Hub(集线器)是接收所有的请求,然后它会将请求分发给不同的Node,Node来实际驱动浏览器。

1. 启动Grid
使用Selenium Grid与普通的Selenium Server的区别在于是否带上了-role参数。

# 启动Selenium Server
java –jar selenium-server-standalone-2.22.0.jar -port 4444

# 启动Selenium Grid的Hub
java –jar selenium-server-standalone-2.22.0.jar -port 4000 -role hub

# 启动Selenium Grid的Node,其中的-hub参数,是Selenium Grid的Hub的URL
java -jar selenium-server-standalone-2.22.0.jar -port 4001 -role node -hub http://127.0.0.1:4000/grid/register

#显然,可以启动多个Node:
java -jar selenium-server-standalone-2.22.0.jar -port 4002 -role node -hub http://127.0.0.1:4000/grid/register

java -jar selenium-server-standalone-2.22.0.jar -port 4003 -role node -hub http://127.0.0.1:4000/grid/register

......

2. 客户端的调用
对于Selenium Grid,客户端Selenium test的开发也是完全和Selenium Server一样的。不过考虑到并行运行,需要尽量避免tests之间的依赖。

3. 启动Grid的一些重要选项

-host: 如果您的本机只有一个IP地址(ipconfig /all),基本上可以忽略这个选项。如果本机还有其他的IP地址(如多网卡、或安装过虚拟机、或使用了VPN等),那最好是指定一个正确的IP地址(能够让Selenium Hub访问到的IP地址)。

-browser:这个选项是其help帮助中(java -jar selenium-server-standalone.jar -help)是没有的。它的作用是指定这个Node支持了哪些浏览器、平台、可以启动几个浏览器实例等。它是可以重复指定的。例如:-browser browserName=chrome,maxInstances=1 -browser browserName=firefox -browser browserName="internet explorer",其含义是本Node支持启动一个Chrome浏览器,启动默认个数的Firefox(默认个数是5),启动默认个数的IE(默认个数 是1)

4. 启动Grid的批处理脚本示例

当需要启动多个Grid Node的时候,想写一个简单的批处理文件来实现它,发现比想象的要复杂一些,几经周折(MS-DOS批处理的语法真的难用),下面的代码可以参考一下:

file=D:\selenium\selenium-standalone.jar

set port_start=5555
set num=2

start java -jar %file% -port 4000 -role hub

for /l %%i in (1 1 %num%) do (
call:mystart %%i %port_start%
)

goto:eof

:mystart
set /a port=%1+%2

start java -Dwebdriver.chrome.driver=d:\selenium\chromedriver.exe -jar %file% -port %port% -role node -hub http://127.0.0.1:4000/grid/register

rem 等待2秒。原因是selenium grid使用启动时间作为sessionid的一部分,如果是同时启动,会导致两个selenium node的session id重复的。
ping 127.0.0.1 -n 3

当你写的selenium的case数达到几十个之后,它的运行时间慢慢的可能就会成为你的一块心病——慢!怎么办呢?很显然,最有效的降低运行时间就是并行来运行这些case啊。并行运行case需要两个条件,缺一不可。1. 在运行case端,需要并行的运行。例如写一个多线程/多进程来同时运行多个case。2. 在Selenium Server端,也要并行的打开多个浏览器窗口,并且各个浏览器窗口 从邮件中下载并安装google-chrome-stable_current_amd64.deb $sudo dpkg -i google-chrome-stable_current_amd64.deb 使用chrome://version/ 查看chr...
实现原理 selenium grid +多线程(持续更新中) 1 selenium grid 工作原理(转自虫师) selenium grid 是勇于设计帮助我们进行分布式测试的工具,其整体结构是由一个hub节点和若干个代理节点组成,hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码与直接调用 selenium -server是一样的. ps:如果是在本机执行,记得在 启动 hub的时
1.一开始用的 selenium -server-standalone-3.1.0一直不成功,也没有关注版本的对应关系 报错(Error forwarding the new session Empty pool of VM for setup Capabilities) 解决方案:取了最新版本 selenium -server-standalone-3.9.1 2.org.openqa. selenium ...
背景:使用到 grid 做分发,已经有两周,运行较稳定,分发也健壮,不知道是不是要因为运行量小,服务器也没出问题,稳定到两周后,发现分发到A服务器(10.40.2.113)和B服务器(10.40.2.114)这两台机器本地连接不上10.40.6.24:3306这个数据库,不知道有谁更改过服务器什么配置没,导致现在有问题 最开始一直被自己带入到一个误区中,只为解决服务器是否能正常...
# 情况一 selenium .common.exceptions.WebDriverException: Message: unknown error: cannot activate web view # 情况二 selenium .common.exceptions.InvalidSessionIdExc
如果你对 Selenium 自动化测试已经非常熟悉,你仅仅需要一个快速上手来使程序运行起来。本章节的内容能满足不同的技术层次,但是如果你仅仅需要一个可以快速上手的指引,那么就显得有点多。如果是这样,你可以参考 Selenium Wiki 的相关文章。   什么是 Selenium - Grid ? Selenium - Grid 允许你在多台机器的 多个 浏览器 并行 的进行测试,也...