Selenium系列之--07 操作远程浏览器

Posted liuyitan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium系列之--07 操作远程浏览器相关的知识,希望对你有一定的参考价值。

Selenium做远程控制,可以通过如下两种方式

a.  客户机启Selenium Standalone Server 作为远程的服务,服务端通过RemoteWebDriver类调用客户机;

b.  通过Selenium Grid 实现分布式执行测试;

一、环境准备

1. 安装JDK(jdk1.8.0_101);
2. 下载安装firefox,chrome浏览器 ;
3. 下载selenium-server-standalone.jar (官方下载地址);
4. 下载InternetExplorerDriver,ChromeDriver,geckodriver(selenium3.0以及之后的版本支持的firefox driver)

二、RemoteWebDriver

Selenium框架的远程控制主要是通过RemoteWebDriver这个类来实现的。

本例中【测试代码放在服务器上,执行代码的机器为客户机】

技术图片

客户机操作

2.1. 首先配置JDK,并配置环境变量,增加放WebDriver文件的地址(即将相应的WebDriver文件夹配置到环境变量的path中)

2.2. 启动独立测试jar包(注意JAR包的版本号)

java -jar E:Seleniumselenium-server-standalone-2.46.0.jar

技术图片

服务端操作

2.3. 验证客户端响应是否正常。在浏览器中输入地址:http://客户机IP地址:4444/wd/hub/ ,显示如下页面。

技术图片

2.4. 写测试代码,通过RemoteWebDriver调用客户机

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 RemoteIEBrowser {
    public static void main(String[] args) throws MalformedURLException, InterruptedException {
        // RemoteWebDriver的基本使用

        //第一个参数:表示服务器的地址。第二个参数:表示预期的执行对象,其他的浏览器都可以以此类推
        WebDriver driver = new RemoteWebDriver(new URL("http://10.10.12.162:4444/wd/hub/"), DesiredCapabilities.internetExplorer());
        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();
   }
}

2.5. 执行脚本。执行过程中可以看到客户端的浏览器被调用,同时cmd窗口中打印出相关的运行信息,如下 

技术图片

三、Selenium GRID

Selenium Grid 用于解决分布式执行UI测试的痛点,Selenium2之后Selenium Grid被集成到了 Selenium Server 中,即包含在 selenium-server-standalone-x-x-x.jar 包中,其结构图如下所示:

 技术图片

Selenium Grid实际它是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行。

  • 3.1. 启动HUB,脚本如下,

  • java -jar selenium-server-standalone-2.46.0.jar -role hub -maxSession 10 -port 4444
     
    -role hub :启动的是HUB,
    -maxSession :最大会话数量
    -prot:指定端口
  • 技术图片
  • 3.2. 测试HUB是否启动成功
  • 技术图片
  • 3.3. 启动NODE节点
  • java -Dwebdriver.IE.driver=E:SeleniumIEDriverServer.exe -jar E:Seleniumselenium-server-standalone-2.46.0.jar -role node -port 6666 -hub http://10.10.12.161:4444/grid/register -browser browserName=IE

    -role node :启动的是node节点 -hub :hub 的地址及端口号 -Dwebdriver.chrome.driver:驱动类型 -maxSession :最大会话数量 -browserName:浏览器名称 -注意,有些参数如果不必要时,是可以不用写的,比如platform是系统.
  • 3.4.hub端浏览器刷新页面http://localhost:4444/grid/console,这里也可以看见node节点的情况.
  • 技术图片
  • 3.5.测试NODE是否启动成功,也是通过RemoteWebDriver对象. 代码如2.4
  • 
    

    public static WebDriver getRemoteIEDriver(String ffUrl) {
    try {
    DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
    URL urlInstance = new URL(ffUrl); //指定URL
    WebDriver driver = new RemoteWebDriver(urlInstance, capabilities); //使用RemoteWebDriver初始化
    logger.info("Firefox 浏览器启动完成!");
    return driver;
    } catch (Exception e) {
    logger.error("Firefox 浏览器启动失败!");
    logger.error("===============>" + e.getMessage().toString());
    e.printStackTrace();
    return null;
    }
    }

     

    public class RemoteIEBrowser {
    
        public static void main(String[] args) throws MalformedURLException, InterruptedException {
            // RemoteWebDriver的基本使用
    
            //第一个参数:表示服务器的地址。第二个参数:表示预期的执行对象,其他的浏览器都可以以此类推
            WebDriver driver = getRemoteIEDriver("http://10.10.12.162:6666/wd/hub/");
            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();
       }
    
    }

以上是关于Selenium系列之--07 操作远程浏览器的主要内容,如果未能解决你的问题,请参考以下文章

爬虫 + 自动化利器 selenium 之自学成才篇

Selenium之前世今生

Selenium3 + Python3自动化测试系列十——调用JavaScript代码

3爬虫之selenium模块

selenium之登陆操作举例

爬虫 + 自动化利器 selenium 之自学成才篇