*Selenium Grid2


(一)Selenium Server 环境配置、工作原理

Selenium-Grid 允许你在多台机器的多个浏览器上并行的进行测试,也就是说,你可以同时运行多个测试。本质上来说就是,Selenium-Grid 支持分布式的测试执行。它可以让你的测试在一个分布式的执行环境中运行。

在多个浏览器中运行测试,在多个版本的浏览器中进行测试,或在不同操作系统的浏览器中进行测试。

利用 Selenium Grid 可以在不同的主机上建立主节点(hub)和分支节点(node)。可以使主节点上的测试用例在不同的分支节点上运行。对于不同的节点来说,可以搭建不同的测试环境(操作系统、浏览器),从而使一份测试用例得到不同环境下的执行结果。

Grid 2 不再提供单独的包,其功能已经集成到 Selenium Server 当中,所以,需要下载与运行 SeleniumServer 才可以使用 Grid2 的功能。

1、下载 Selenium Server

**下载地址:**http://www.seleniumhq.org/download/

通过浏览器打开页面,找到 Selenium Standalone Server 的介绍,点击版本号链接下例,例如 Download version 2.48.2,下载完成将得到 selenium-server-standalone-xxx.jar。由于该 jar 包由 Java 开发,所以对于 jar包的运行需要 Java 环境。

2、配置 Java 环境

3、运行(启动) Selenium Server

  • 打开cmd;
  • 切换到 Selenium Server 所在目录启动;
  • > java -jar selenium-server-standalone-3.8.1.jar

这里写图片描述

4、比较 RC 脚本与 Web Driver 脚本的不同

Selenium1.0 RC 脚本的执行依赖于 Selenium Server;Selenium Server 是由 java 开发的一个 jar 包。所以,要想启动
Selenium Server 必须先安装 java 环境。

seRC.java

package com.mypro.grid;
import ......

public class seRC {
	private Selenium selenium;     //RC
    //private WebDriver driver;    //Web Driver
    //private String baseUrl;
    //private StringBuffer verificationErrors = new StringBuffer();
	
	@Before       //RC
	public void setUp() throws Exception {
		selenium = new DefaultSelenium("localhost", 4444, "*chrome", "https://www.baidu.com/");
		selenium.start();
	}

	//@Before       //Web Driver
    //public void setUp() throws Exception {
    //    driver = new ChromeDriver();
    //    baseUrl = "https://www.baidu.com/";
    //    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    //}

	@Test            //RC
	public void testSeRC() throws Exception {
		selenium.open("/");
		selenium.type("id=kw", "selenium");
		selenium.click("id=su");
	}

	//@Test            //Web Driver
    //public void testCase() throws Exception {
    //    driver.get(baseUrl + "/");
    //    driver.findElement(By.id("kw")).clear();
    //    driver.findElement(By.id("kw")).sendKeys("junit");
    //    driver.findElement(By.id("su")).click();
    //    Thread.sleep(2000);
    //    String title =driver.getTitle();
    //    assertEquals(title,"junit_百度搜索");
    //}
    
	@After             //RC
	public void tearDown() throws Exception {
		selenium.stop();
	}
	
	//@After             //Web Driver
    //public void tearDown() throws Exception {
    //    driver.quit();
    //    String verificationErrorString = verificationErrors.toString();
    //    if (!"".equals(verificationErrorString)) {
    //        fail(verificationErrorString);
    //    }
    //}
}

与 WebDriver 最大的不同是 RC 在执行指定代理的主机:selenium = new DefaultSelenium(“localhost”, 4444, “*chrome”,“https://www.baidu.com/”);

  • localhost 表示本机;
  • 4444 表示端口号;
  • *chrome 表示所运行的浏览器;
  • http://www.baidu.com 访问的 RUL 地址。

5、Selenium Grid 工作原理

Grid 是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个 集线器hub 主节点和若干个 客户机node 代理节点组成。如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的测试方案就是使用 selenium grid;hub 用来管理各个代理节点的注册和状态信息,并且接收远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。使用 Grid 远程执行测试的代码与直接调用 Selenium Server 是一样的,只是环境启动的方式不一样,需要同时启动一个 hub 和至少一个 node。启动node节点(在你使用的node节点机器上执行命令,也可以在hub集线器机器上执行,即把hub集线器当成node节点);

> java -jar selenium-server-standalone-3.8.1.jar -role hub     // hub启动命令可做成bat文件,方便维护与使用
> java -jar selenium-server-standalone-3.8.1.jar -role node

上面分别启动了一个 hub 和一个 node:

  • hub 默认监听端口号为 4444,默认IP是localhost ; 如果要修改,只需要加-port 参数和-Hubhost :java -jar selenium-server-standalone-2.53.0.jar -role hub -port 1234 -Hubhost 192.168.1.30
    如果要在两台不同的机器上运行中心和节点,只需要将“localhost”替换成中心所在机器的 hostname 即可;
  • node 默认端口号为 5555。若是同一台主机上要启动多个 node 则需要注意指定端口号,可以通过下面的方式来启动多个 node 点节:
> java -jar selenium-server-standalone-3.8.1.jar -role node -port 5555
> java -jar selenium-server-standalone-3.8.1.jar -role node -port 5556
> java -jar selenium-server-standalone-3.8.1.jar -role node -port 5557

**注意:**在同一台电脑上启动一个hub+2个node 需要打开三个cmd窗口;三个窗口分别cd进入到selenium-server-standalone所在文件夹目录下,然后执行上面的Java命令;

(1)开启hub+node:
  • 开启hub:
    这里写图片描述

  • 开启第一个node,端口号为5555:
    这里写图片描述

  • 开启第二个node,端口号为5556:
    这里写图片描述

  • 开启完两个node节点之后,在第一个hub窗口最下面会出现两行内容:显示node开启成功:
    这里写图片描述

hub 和 两个 node 都开启成功之后,在第一个窗口hub 里面按 Ctrl + C 终止 hub 服务,此时在两个 node 窗口下方出现连接失败的提示,在hub窗口执行Java命令重新开启hub之后,在两个node 窗口自动注册成功:(在命令行结尾处+&,可在关闭窗口时保持服务连接)

  • 这里写图片描述

  • 这里写图片描述

通过浏览器访问 Grid 的控制台:http://127.0.0.1:4444/grid/console

  • 通过控制台查看启动的节信息:
    这里写图片描述
(2)调用 Grid 的基本结构图:
  • 这里写图片描述

当你的测试用例需要验证的环境比较多时,可以并行地执行这些用例进而缩短测试总耗时。关于并行的能力需要借助编程语言的多线程技术,但 TestNG 单元测试框架已经支持多线程的使用。Grid 可以根据用例中指定的平台配置信息把用例转发给符合匹配要求的测试代理。例如,你的用例中指定了要在 Linux上 FireFox 版本进行测试,那么 Grid 会自动匹配注册信息为 Linux 且安装了 Fireox 的代理节点,如果匹配成功则转发测试请求,如果失败则拒绝请求。调用的基本结构图如下图所示。

  • 这里写图片描述

通过selenium-grid执行远程操作时,并不需要远程机器上有测试脚本;但是远程机器上必须安装了对应的webdriver程序[可以直接放在环境变量的目录里即可],当然了,还得需要正确的启动了代理程序。


6、在多台电脑上开启hub和node:

(1)准备工作:

  • hub集线器上安装jdk,selenium-server-standalone-xxx.jar,准备好各浏览器的驱动(主要是chromedriver和iedriver)
  • node节点上也需要安装jdk,selenium-server-standalone-xxx.jar,准备好各浏览器的驱动(主要是chromedriver和iedriver)

(2)启动hub节点:
在你使用的hub集线器机器上执行命令:java -jar selenium-server-standalone-2.53.0.jar -role hub
其默认监听端口4444,默认IP是localhost 如果要修改,只需要加-port 参数和-Hubhost
java -jar selenium-server-standalone-2.53.0.jar -role hub -port 1234 -Hubhost 192.168.1.30

(3)启动node节点
在你使用的node节点机器上执行命令,也可以在hub集线器机器上执行,即把hub集线器当成node节点:

//方式一:
java -jar selenium-server-standalone-2.53.0.jar -role node -hub http://hub集线器的ip:4444/grid/register -Dwebdriver.chrome.driver=chromedriver.exe  -browser browserName=chrome
//方式二:
java -jar selenium-server-standalone-2.25.0.jar -role node -browser browserName=firefox,version=7.0,firefox_binary=C:\Program Files\Mozilla Firefox,maxInstances=3,platform=WINDOWS -browser browserName=chrome,version=20,platform=WINDOWS -hub http://hubhost:4444/grid/register 

这里指定了要启动的浏览器和对应的浏览器驱动,node启动命令可做成bat文件,方便维护与使用)
其默认监听端口5555,如果要修改,只需要加-port 参数:
例如:java -jar selenium-server-standalone-2.53.0.jar -role node -port 6666 -hub .............

node节点的启动参数也可以做成json文件,json文件内容如下(文件名随意取,我这里的文件名为:node.json):
{ “capabilities”:[{ “browserName”: “chrome”, “maxInstances”: 6, “platform”: “WINDOWS”, “version”:“52.0.2743.82 m”,“webdriver.chrome.driver”:“chromedriver.exe” }], “configuration”: { “proxy”: “org.openqa.grid.selenium.proxy.DefaultRemoteProxy”, “maxSession”: 5, “port”: 5555, “register”: true, “registerCycle”: 5000, “hub”: “http://192.168.1.36:4444” } }

执行配置文件node.json:java -jar selenium-server-standalone-2.53.0.jar -role node -hub http://hub集线器的ip:4444/grid/register -nodeConfig node.json

(4)现在hub集线器和node节点都已经启动完毕了,意味着hub集线器已经完全控制了node节点,开始编写脚本

public void setUpDriver() throws MalformedURLException{
        ChromeOptions options = new ChromeOptions(); 
        //加载chrome浏览器的配置文件,比如插件,下载设置等,建议先在浏览器中设置好,不要把浏览器的一些参数写在脚本里
        options.addArguments("user-data-dir=C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data");
       //启动chrome浏览器
        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        //将配置文件加载到chrome浏览器中
        capabilities.setCapability(ChromeOptions.CAPABILITY,options);
        //capabilities.setCapability("chromeOptions", options);

       //启动远程的node节点,注意:URL地址一定要写你的node节点的地址,端口号为你指定的端口号,若没有修改,则就是默认的5555,若修改了,就用你自己修改过后的端口号
        driver = new RemoteWebDriver(new URL("http://node节点的ip:5555/wd/hub"), capabilities);
       //打开百度主页
        driver.get("http://www.baidu.com");
}

(二)Selenium Grid 应用

到目前为止,我们编写的脚本只能在固定的某一款浏览器上执行,因为在编写测试用例之前需要先指定好浏览器的驱动(ChromeDriver、FirefoxDriver、InternetExplorerDriver),一旦确定了浏览器驱动是不能进行更改的。我们希望写好的测试用例可以不同的平台和浏览器上运行,下面就通过实例来演示 Grid 的使用。

1、RemoteWebDriver

WebDriver 提供了 RemoteWebDriver 驱动模式可以发送指令控制远程服务器的浏览器执行测试。这种模式需要借助于 Grid 来实现,所以需要先启动 Selenium Server:> java -jar selenium-server-standalone-2.39.0.jar

首先我们先来认识 RemoteWebDriver 驱动的使用:

TestGrid.Java

package com.mypro.grid;
import ......

public class TestGrid {
	public static void main(String[] args) throws Exception {
		WebDriver driver = new RemoteWebDriver( new	URL("http://127.0.0.1:4444/wd/hub"), DesiredCapabilities.chrome());
		driver.get("https://www.baidu.com");
		driver.findElement(By.id("kw")).sendKeys("selenium");
		driver.findElement(By.id("su")).click();
		driver.quit();
	}
}

(注意:脚本的执行需要启动 Selenium Server。)

2、多浏览器执行用例

我们还可以通过 for 循环遍历常用的几款浏览器,使同样一个测试脚本分别在不同的浏览器下运行一遍。

Grid02.Java

package com.mypro.grid;
import ......

public class Grid02 {
	private static WebDriver driver;
	private static DesiredCapabilities browser;
	
	public static void runBaiduTest(WebDriver driver){
		driver.get("https://www.baidu.com");
		driver.findElement(By.id("kw")).sendKeys("selenium");
		driver.findElement(By.id("su")).click();
		driver.quit();
	}
	public static void main(String[] args) throws Exception {
		String browsers [];
		browsers = new String[3] ;
		browsers[0] = "ff";
		browsers[1] = "ie" ;
		browsers[2] = "chrome";
		
		for (int i=0;i<3;i++){
			System.out.println(browsers[i]);
			if(browsers[i].equals("ie"))     browser =	DesiredCapabilities.internetExplorer();
			else if(browsers[i].equals("ff"))     browser =	DesiredCapabilities.firefox();
			else if(browsers[i].equals("chrome"))   browser = DesiredCapabilities.chrome();
			else      System.out.println("browser 参数有误,只能为 ie、 ff、chrome");
			
			driver = new RemoteWebDriver(new URL("http://127.0.0.1:4444/wd/hub"),browser);
			runBaiduTest(driver);
		}
	}
}

首先定义了一个字符串数组 browsers,数组中分别存放了不同的浏览器(ff,ie,chrome),通过 for循环读取数组中的元素,并通过 if 判断来定义不同的浏览器驱动。

3、多节点执行用例

下面来启动多个节点,使同一个脚本分别在不同的节点上执行:

(1)在本机打开两个命令提示符窗口分别启动一个 hub和两个 node(节点):

  • >java -jar selenium-server-standalone-2.39.0.jar

  • >java -jar selenium-server-standalone-2.39.0.jar -role node -port 5555

  • >java -jar selenium-server-standalone-2.39.0.jar -role node -port 6666

(2)修改脚本使其在不同的节点与浏览器上运行:

Grid03.java

package com.mypro.grid;
import ......

public class Grid03 {
	private static WebDriver driver;
	private static DesiredCapabilities br;
	
	public static void runBaiduTest(WebDriver driver){
		driver.get("https://www.baidu.com");
		driver.findElement(By.id("kw")).sendKeys("selenium");
		driver.findElement(By.id("su")).click();
		driver.quit();
	}
	public static void main(String[] args) throws Exception {
		HashMap<String, String> config = new HashMap<String, String>(); 
		config.put("ff", "http://127.0.0.1:4444/wd/hub");
		config.put("ie", "http://127.0.0.1:5555/wd/hub");
		config.put("chrome", "http://127.0.0.1:6666/wd/hub");
			
		Iterator<String> it = config.keySet().iterator();    //采用 Iterator 遍历 HashMap
		while(it.hasNext()) {
			String browser = (String)it.next();              //获得字典的 key(浏览器)
			System.out.println(browser);
			String nodeip = config.get(browser);	         //获得字典的 value(节点)
			System.out.println(nodeip);
			
			if(browser.equals("ie"))    br = DesiredCapabilities.internetExplorer();
			else if(browser.equals("ff"))    br = DesiredCapabilities.firefox();
			else if(browser.equals("chrome"))    br = DesiredCapabilities.chrome();
			else    System.out.println("browser 参数有误,只能为 ie、 ff、chrome");
			driver = new RemoteWebDriver(new URL(nodeip),br);
			runBaiduTest(driver);
		}
	}
}

创建 HashMap 字典,定义不同的主机端口号与浏览器,通过 for 循环读取字典中的主机与浏览器给RemoteWebDriver,使脚本执行时调用不同的主机和浏览器。

(3)启动远程 node :
我们目前启动的 hub 与 node 都是在一台主机上。那么要在其它主机启动 node 必须满足以下几个要求:

  • 本地 hub 主机与远程 node 主机之间可以相互 ping 通;
  • 远程主机必须安装运行脚本的运行环境(Java、Selenium、浏览器及浏览器驱动 );
  • 远程主机必须安装 java 环境,因为需要运行 Selenium Server;

(4)操作步骤如下:

  • 启动本地 hub 主机(本地主机 IP 为:192.168.0.106):
java -jar selenium-server-standalone-2.39.0.jar -role hub
  • 启动远程主机 node (操作系统:Ubuntu ,IP 地址:172.16.10.34 ):
fnngj@fnngj-VirtualBox:~/selenium$ java -jar selenium-server-standalone-2.39.0ar -role node -port 5555 -hub http://172.16.10.66:4444/grid/register

(设置的端口号为:5555 ,指向的 hub IP 为:172.16.10.66 )

  • 修改远程主机的 IP 地址及端口号,在其上面的 firefox 浏览下运行脚本:
    hosts.java
……
HashMap<String, String> config = new HashMap<String, String>();
config.put("ff", "http://127.0.0.1:4444/wd/hub");
config.put("ie", "http://127.0.0.1:5555/wd/hub");
config.put("chrome", "http://172.16.10.34:5555/wd/hub"); 
……

现在再来运行脚本,你将会在 Ubuntu(172.16.10.34)主机上看到脚本被执行。

(5)小技巧
在启动 Selenium Server 时,每次都要输入一长串命令,非常麻烦。我们可以将启动命令生成批处理文件,方法很简单。首先创建一个startup.bat文件,例如,Selenium Server存放于D盘selenium目录下,那么可以在.bat 文件中输入:
java -jar D:\\selenium\selenium-server-standalone-2.47.0.jar -role hub
然后,在需要启动 Selenium Server 的时候,只需双击 startup.bat 文件即可。 另外,我们还可以通过
VisGrid 工具来启动和管理节点。如图 :
这里写图片描述

4、多线程多节点执行用例

Selenium Grid 本身并不支持并行(多线程)执行测试用例,但是利用 TestNG 单元测试框架的多线程技术可以很轻松的来实现多节点并行(多线程)执行测试用例。
GridThread.java

package com.mypro.grid;
import  ......

public class GridThread {
	private WebDriver dr;
	DesiredCapabilities test;
	String baseUrl;
	
	@Parameters({"browser","nodeUrl","webSite"})
	@BeforeMethod
	public void setUp(String browser,String nodeUrl,String webSite){
		baseUrl = webSite;
		if(browser.equals("ie"))    test =	DesiredCapabilities.internetExplorer();
		else if(browser.equals("ff"))   test = DesiredCapabilities.firefox();
		else if(browser.equals("chrome"))    test = DesiredCapabilities.chrome();
		else    System.out.println("browser 参数有误,只能为 ie、 ff、chrome");
		String url = nodeUrl + "/wd/hub";
		URL urlInstance = null;
		try {
			urlInstance = new URL(url);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("实例化 url 出错,检查一下 url 格式是否正确,格式为http://127.0.0.1:4444");
		}
		dr = new RemoteWebDriver(urlInstance,test);
		dr.get(webSite);
	}
	@Test
	public void test(){
		dr.get(baseUrl);
		dr.findElement(By.id("kw")).sendKeys("selenium");
		dr.findElement(By.id("su")).click();
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("title:"+dr.getTitle());
	}
	@AfterMethod
	public void quit(){
		dr.close();
	}
}

创建 testng.xml 配置文件:testng.xml

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="Suite1" parallel="tests" thread-count="3">
	<test name="test1">
		<parameter name="browser" value="ff"/>
		<parameter name="nodeUrl" value="http://127.0.0.1:4444"/>
		<parameter name="webSite" value="http://www.baidu.com"/>
		<classes>
			<class name="com.mypro.grid.GridThread"></class>
		</classes>
	</test>
	<test name="test2">
		<parameter name="browser" value="chrome"/>
		<parameter name="nodeUrl" value="http://127.0.0.1:5555"/>
		<parameter name="webSite" value="http://www.baidu.com"/>
		<classes>
			<class name="com.mypro.grid.GridThread"></class>
		</classes>
	</test>
	<test name="test3">
		<parameter name="browser" value="ie"/>
		<parameter name="nodeUrl" value="http://127.0.0.1:6666"/>
		<parameter name="webSite" value="http://www.baidu.com"/>
		<classes>
			<class name="com.mypro.grid.GridThread"></class>
		</classes>
	</test>
</suite>

(三)WebDriver 驱动

到目前为止,我们所熟悉的浏览器驱动有:ChromeDriver、FirefoxDriver、InternetExplorerDriver 和 RemoteWebDriver 等,除此之外,WebDriver 还支持哪些平台及驱动呢,本节将会对这些驱动做个简单介绍。

1、WebDriver 所支持的平台/浏览器/模式:

|平台/浏览器/模式 |驱 动 |说明|
|–|
|Android ||支持脚本在 Android WebView 应用的测试,一般指移动端浏览器|
|BlackBerry ||支持脚本在黑莓浏览器上运行|
|Firefox |包含在 Selenium 安装包中|包含在各语言的 Selenium(WebDriver)包里,这也是为什么安装完 Selenium 后就可以直接使用 Firefox 浏览器运行脚本的原因|
|Chrome |chromedriver.exe| 因为 WebDriver 原本为谷歌的项目,之后与 Selenium 项目合并,所以对Chrome 浏览器的支持也非常好|
|IE |IEDriverServer.exe| 需要下载驱动支持,用于驱动脚本在 IE 系列的浏览器下运行|
|Edge |MicrosoftWebDriver.exe |支持脚本在 Windows10 操作系统 Edge 浏览器下执行|
|Opera |operadriver.exe|关 于 Opera 浏 览 器 的 前 世 今 生 比 较 复 杂 , 总 之 , 现 在 的OperaChromiumDriver(原 OperaDriver)基于 ChromeDriver|
|Safari| 包含在 Selenium Server 中|Safari 浏览器由苹果公司开发,最早运行于苹果自家 MAC 平台。目前也提供有 Windows 版本|
|HtmlUnit |包含在 Selenium Server 中|HtmlUnit 将请求返回文档模拟成 HTML, 从而模拟浏览器的运行, 但又非真正的启动一款浏览器执行脚本。|
|PhantomJS| phantomjs.exe|PhantomJS 是一个拥有 JavaScript API 的无界面 WebKit ,和 HtmlUnit 类似,可以看作是一款无界面的浏览器|

####(1)支持平台
WebDriver 支持 AndroidBlackBerry 两个移动平台的浏览器测试。

  • Android目前为市场占有率第一的移动平台,对于其上面自动化测试推荐Appium,Appium 扩展了WebDriver的协议,支持 iOS 平台和 Android 平台上的原生应用、Web 应用和混合应用等。
  • BlackBerry 平台目前的市场占有率很小,国内市场就更少了。
(2)支持浏览器

WebDriver 目前所支持的浏览器包括:Firefox、Chrome、IE、Edge(win10) 、Opera 、Safari(苹果MAC)
选择支持这些浏览器,主要与浏览器的内核有关。

####(3)支持模式
HtmlUnitPhantomJS 是两个比较特殊的模式,我们可以把它们看作是伪浏览器,在这种模式下支持 html、
js 等的解析,但不会真正的渲染出页面。由于不进行 CSS 及 GUI 渲染,所以运行效率上要比真实浏览器快很多,主要用在功能性测试上面

2、Edge 浏览器

目前 Selenium 2.47.0 版本已经支持 Edge 浏览器,不过,Edge 浏览器只能运行于 Windows 10 操作系统。与IE 浏览器一样,要想让测试用例在该浏览器上运行需要该浏览器的驱动,需要下载大于 Selenium2.47.0 版的 jar包。

注意:在不知道驱动名称和下载地址的情况下,可以直接运行代码,早报错信息里会提供所需要的驱动和下载地址的链接!

Console 提示信息:

Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.edge.driver system property; for more information,see https://github.com/SeleniumHQ/selenium/wiki/MicrosoftWebDriver. The latest version can be downloaded from http://go.microsoft.com/fwlink/?LinkId=619687

在错误信息的最后给出了 Edge 驱动的下载地址,复制链接下载 MicrosoftWebDriver.msi 文件。然后,双击进行安装。默认会被安装在 C:\Program Files (x86)\Microsoft Web Driver 目录下。将该目录添加到系统环境变量path 下。或者将该目录下的MicrosoftWebDriver.exe 文件拷贝到已经添加到环境变量 path 的目录下。然后,再来执行上面的脚本,Edge 浏览器就可以被正常打开了

3、Opera 浏览器

Opera 浏览器的发展在浏览器内核介绍部分有所介绍。最近 Opera 浏览器采用 Blink 内核,需要OperaChromiumDriver 驱动支持。

**GitHub 地址:**https://github.com/operasoftware/operachromiumdriver
下载 operadriver_win64.zip,解压后将得到 operadriver.exe 文件,同样将其放到系统环境变量 path 的目录下。

4、Safari 浏览器

Safari 为苹果公司的浏览器,最早支持 MAC 平台,不过,现在已经支持 Windows 平台。与其他浏览器有所不同,Safari 浏览器没有相应的驱动文件,它的驱动被集成到了 Selenium Server 中,所以,需要通过RemoteWebDriver 模式运行。
首先,在 Windows 命令提示符(或 Linux 终端)下启动 Selenium Server,然后,运行脚本。

java -jar selenium-server-standalone-2.47.0.jar

5、HtmlUnit 模式

HtmlUnit 官方网站: http://htmlunit.sourceforge.net/

HtmlUnit 是一款开源的 Java 页面分析工具,读取页面后,可以有效的使用 HtmlUnit 分析页面上的内容。项目可以模拟浏览器运行,被誉为 Java 浏览器的开源实现。这个没有界面的浏览器,运行速度也是非常迅速的。Selenium Server 中同样包含了 HtmlUnit 驱动。

首先,在 Windows 命令提示符(或 Linux 终端)下启动 Selenium Server,然后,运行脚本。

java -jar selenium-server-standalone-2.47.0.jar

这种模式下运行脚本并不会真正的打开浏览器,整个过程都是在后台执行的。所以,我们在脚本的开始和结束的位置添加了打印信息,当然,更好的做法是在适当的步骤添加截图;

6、PhantomJS 模式

**PhantomJS 官方网站:**http://phantomjs.org/

PhantomJS 是一个拥有 JavaScript API 的无界面 WebKit 内核,与 HtmlUnit 类似。正如我们所知道的,Webkit是 Safari 和其他一些浏览器使用的布局引擎。因此,PhantomJS 是一个浏览器,而且是一个无界面的浏览器。这意味着,渲染后的网页实际上绝不会显示。这或许有些不可思议,所以我们可以把它作为一个可编程的浏览器终端。在使用 PhantomJS 之前,需要先下载。PhantomJS 支持 Windwos、MAC、Linux 等平台,我们可以根据自己的环境选择相应的版本进行下载。下载完成后解压得到 phantomjs.exe 程序,将其同样将其放到系统环境变量 path 的目录下,即可通过PhantomJS 模式运行测试脚本。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值