Selenium-Grid2 配置RemoteWebDriver

为什么要使用Selenium Grid ?

  • 分布式运行大规模的Test
  • 能够通过一个中央点,很容易的运行不同OS上的不同browser
  • 最小化对Grid的维护时间,并能充分利用虚拟设备

Selenium Grid 部署与启动

Hub :总控节点,连接调用Node。 
Node: 负责执行Tests,调用浏览器。

下面以selenium-server-standalone-2.27.0.jar版本为例: 
使用这样3台机器:

  • 10.81.14.170
  • 10.81.14.180
  • 10.81.14.190

启动Hub(10.81.14.180):

java  -jar  selenium-server-standalone-2.27.0.jar -role hub

在浏览器内打开:http://10.81.14.180:4444/grid/console可以查看Hub状态。也就是说Grid默认启动端口是4444,如果想切换为其他端口,则加-port参数。比如要切换为8888:

java  -jar  selenium-server-standalone-2.27.0.jar -role hub  -port 8888

启动Node(10.81.14.170):

java -jar selenium-server-standalone-2.27.0.jar -role node -hub http://10.81.14.180:8888/grid/register

同样的,也可以使用-port切换node端口,默认端口是5555. 
此处的node节点,也可以作为一个单机的远程节点存在,并同时支持RC,WebDriver。浏览器输入http://10.81.14.180:8877/wd/hub可以看到session信息。

然后,同样的启动10.81.14.180、10.81.14.190上的Node节点。

打开浏览器http://10.81.14.180:8888/grid/console,可以看到如下的界面:

至此,Selenium Grid2已经配置成功了。

使用Grid运行Tests

Selenium Grid2是向后兼容的,同时支持RC,WebDriver。如果使用RC,即Selenium1,使用以下的方法:

Selenium selenium = new DefaultSelenium(“10.81.14.180”, 8888, “*firefox”, “http://www.baidu.com”);

使用WebDriver的话,使用以下的方法:

DesiredCapabilities capability = DesiredCapabilities.firefox();
WebDriver driver = new RemoteWebDriver(new URL("http://10.81.14.180:8888/wd/hub"), capability);

可以看出所有的请求都发给了Hub,然后由Hub分配给匹配的节点来执行。 
那么,Hub是如何来分配的呢?往下看

Node配置

默认,Node会启动11个浏览器实例:5 Firefox,5 Chrome, 1 Internet Explorer. 从Grid Console界面看出来,为什么每个机器上有22个实例呢?是这样的,Node为了同时支持RC与WebDriver两种协议,所以就是2*11了。把鼠标放到各个浏览器图标上,就可以看出里面的配置区别了。
内容类似:

{
      "browserName": "*firefox",
      "maxInstances": 5,
      "seleniumProtocol": "Selenium"
    }

或者

 {
      "browserName": "firefox",
      "maxInstances": 5,
      "seleniumProtocol": "WebDriver"
    }

其中,seleniumProtocol就是定义的不同协议了。

如何修改Driver配置呢?可以从启动参数里操作。

-browser browserName=firefox,version=3.6,maxInstances=5,platform=LINUX

那Node默认启动的配置是什么呢? 
由于如果从启动参数里,配置这个多东西,很难写的。因此,官方很人性化的提供了JSON文件来配置。也就是说默认启动的配置如下: 
http://code.google.com/p/selenium/source/browse/trunk/java/server/src/org/openqa/grid/common/defaults/DefaultNode.json

http://code.google.com/p/selenium/source/browse/trunk/java/server/src/org/openqa/grid/common/defaults/DefaultHub.json

如果想自定义配置,直接对json文件修改,启动时,指定配置文件就可以了。

java -jar selenium-server-standalone.jar -role hub -hubConfig hubconfig.json

仅仅就这样就行了?从博文http://www.shenyanchao.cn/blog/2012/10/12/selenium-multiple-browser-support/知道,浏览器的启动是要制定一些driver位置的,否则Node不知道怎么启动浏览器实例。因此需要进行指定:

java -jar selenium-server-standalone-2.27.0.jar -port 8877 -role node -hub http://10.81.14.180:8888/grid/register  -nodeConfig nodeconfig.json -Dwebdriver.chrome.driver="E:/selenium/chromedriver.exe" -Dwebdriver.ie.driver="E:/selenium/IEDriverServer.exe"

参考文档:
http://code.google.com/p/selenium/wiki/Grid2

客户端书写测试用例


package seleniumdemo;

import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class EDemo2 {

     public static void main(String[] args) throws MalformedURLException, InterruptedException {
          // RemoteWebDriver的基本使用

          //第一个参数:表示服务器的地址。第二个参数:表示预期的执行对象,其他的浏览器都可以以此类推
          WebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:4444/wd/hub/"), DesiredCapabilities.chrome());
          driver.manage().window().maximize();
          driver.get("http://www.baidu.com");
          Thread.sleep(2000);
          JavascriptExecutor js = (JavascriptExecutor)driver;
          js.executeScript("alert(‘我现在在服务器‘)");
          Thread.sleep(2000);
          driver.quit();
     }

}

执行脚本

其实脚本是在服务器端执行的,客户端用于发送命令。执行过程中可以看到服务器端的chrome别调用,同时cmd打印出相关的运行信息,如下 

时间: 2024-09-29 15:50:06

Selenium-Grid2 配置RemoteWebDriver的相关文章

C# selenium环境配置

1.下载C#selenium selenium官网:  http://www.seleniumhq.org/download/ 下载后解压: 打开net35后,将里面的dll文件添加到ranorex中: 2.浏览器环境配置 将需要用到的浏览器chrome,firfox,等exe所在的文件 夹添加到系统变量path中去,必要的时候需要重启电脑: 这一步很重要,否则运行下面的脚本打开不了浏览器,需要在脚本中添加浏览器地址 3.本地运行脚本: using Selenium; using OpenQA.

Java - Selenium 环境配置

1. 安装Java JDK - 文件自己下 2. 配置环境变量-重要! 我的电脑-属性-高级-环境变量 添加 CLASSPATH  值 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar 添加 JAVA_HOME  值  C:\Program Files\Java\jdk1.7.0_79(步骤一安装完成的jdk jre路径) Path 后补 ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 3. 测试 cmd 输入Java -versi

Selenium chrome配置代理Python版

环境: windows 7 + Python 3.5.2 + Selenium 3.4.2 + Chrome Driver 2.29 + Chrome 58.0.3029.110 (64-bit) Selenium官方给的Firefox代理配置方式并不起效,也没看到合适的配置方式,对于Chrome Selenium官方没有告知如何配置,但以下两种方式是有效的: 1. 连接无用户名密码认证的代理 chromeOptions = webdriver.ChromeOptions() chromeOpt

selenium Grid2

一.Selenium Server 环境配置 1.selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的测试方案就是使用 selenium grid,hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行. 其结构组成: 2.下载 Selenium Server 下载地址:http://www.s

selenium环境配置

python安装 下载地址:https://www.python.org 选择合适平台的版本安装: 配置Python环境变量: Path变量中配置python安装地址,如:D:\Python36; 如果是Python27,还需要安装ez_setup.py 下载地址:https://bootstrap.pypa.io/ez_setup.py 把ez_setup.py文件下载到python目录下,然后cmd运行python ez_setup.py pip安装 下载地址:https://pypi.py

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

下载 selenium-server-standalone-3.4.0.jar包 在selenium-server-standalone-3.4.0.jar包目录下面执行cmd 命令 java -jar selenium-server-standalone-3.4.0.jar -role hub  启用selenium grid hub, 默认端口 4444 注册浏览器客户端,命令行执行:java -Dwebdriver.ie.driver="D:\AutoConf\bin\IEDriverSe

Python安装selenium,配置火狐浏览器环境

想用Python去编写自动化脚本进行网页访问时,遇到了一些问题, File "C:\Python34\lib\site-packages\selenium-3.0.0b2-py3.4.egg\selenium\webdriver\common\service.py", line 64, in start stdout=self.log_file, stderr=self.log_file) File "C:\Python34\lib\subprocess.py",

python+selenium 环境配置

配置环境: python:3.5 selenium:3.3.0 安装方式:python pip install -u selenium windows: 10 firefox:52 因为firefox版本较高,所以需要专门的driver来驱动,需要下载geckodriver 百度网盘地址:http://pan.baidu.com/s/1dEBbkwp 放置位置 Windows: python安装根目录(与python.exe 同一目录) Mac: /user/local/bin 测试代码: fr

Selenium chrome配置不加载图片Python版

环境: windows 7 + Python 3.5.2 + Selenium 3.4.2 + Chrome Driver 2.29 + Chrome 58.0.3029.110 (64-bit) from selenium import webdriver chrome_options = webdriver.ChromeOptions() prefs = {"profile.managed_default_content_settings.images":2} chrome_opt