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:\Selenium\selenium-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:\Selenium\IEDriverServer.exe -jar E:\Selenium\selenium-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();
       }
    
    }

原文地址:https://www.cnblogs.com/liuyitan/p/10516615.html

时间: 2024-08-02 13:14:04

Selenium系列之--07 操作远程浏览器的相关文章

python selenium系列(三)常用操作类型及方法

一 前言 开展WEB UI自动化的核心思路,无非就是找到元素,然后操作元素这两个内容.在python selenium系列(二)元素定位方式一文中,已经介绍了如何找到元素这项技能,本文将介绍第二项内容,即如何操作已经找到的元素. 二 操作方法分类 总体来说,可以将操作大体分成四类,即浏览器操作.键盘操作.鼠标操作.js脚本. 1.  浏览器常用操作方法: 方法 描述 driver.maximize_window() 窗口最大化 driver.back() 页面返回 driver.forward(

python+selenium操作chrome浏览器抓取网页解决方案

以下操作均是在ubuntu系统下运行 from selenium import webdriver from scrapy.selector import Selector #操作chrome浏览器抓取淘宝 driver = webdriver.Chrome() driver.get('淘宝链接') print(driver.page_source) t_selector = Selector(text=driver.page_source) tm_price = t_selector.xpat

atitit.浏览器web gui操作类库 和 操作chrome浏览器的类库使用总结

atitit.浏览器web gui操作类库 和 操作chrome浏览器的类库使用总结 1. 常见标准 1 1.1. 录制重放 1 1.2. 一个窗体一个proxy cookie 1 1.3. exec js 1 1.4. js 调用java 1 1.5. 修改dom属性 2 1.6. 关键字驱动 2 1.7. 加载js类库 2 1.8. 一个窗口一个代理 2 1.9. 独立窗口cookie 2 1.10. 无图模式支持 2 1.11. 支持自定义路径 2 2. 框架选型selenium2(web

IOS开发系列--无限循环的图片浏览器

--UIKit之UIScrollView 概述 UIKit框架中有大量的控件供开发者使用,在iOS开发中不仅可以直接使用这些控件还可以在这些控件的基础上进行扩展打造自己的控件.在这个系列中如果每个控件都介绍一遍确实没有必要,所谓授人以鱼不如授人以渔,这里会尽可能让大家明白其中的原理,找一些典型的控件进行说明,这样一来大家就可以触类旁通.今天我们主要来看一下UIScrollView的内容: UIView UIScrollView 实战--图片浏览器 UIView 在熟悉UIScrollView之前

[python爬虫] Selenium切换窗口句柄及调用Chrome浏览器

因为我的博客是根据我每个阶段自己做的事情而写的,所以前言可能有点跑题,但它更有利于让我回忆这个阶段自己的所作所为.这篇文章主要介绍Selenium爬虫获取当前窗口句柄.切换窗口句柄以及调用Chrome浏览器几个知识点,其中获取当前句柄的方法是非常重要的一个知识点,只有真正遇到的时候才能体会到它的强大.        最近课程比较多,写博客的内容也比较杂,包括网站搭建.HTML设计.计算机图形学.Python数据挖掘.Flash动画等.同时,这周也有老师让我帮忙写几个爬虫,自己进一步理解了爬虫的好

C#操作IE浏览器

最近的一个B/S系统中,用到了指模录入,当用户按了手指摸之后,要在IE浏览器的一个文本框上显示用户的姓名.由于要监控指模机的输入,因此客户端需要装一个.net控制台程序,通过此控制台程序监控指模机.这个没办法.这个.net控制台程序装在公司前台的电脑上就OK了.然后通过局域网与指模机相联,当用户按手指摸并且验证通过之后,从指模机读取用户的姓名,然后检测当前浏览器是否有打开系统上的某个页面.如果有,则将姓名输入到IE浏览器的响应文本框. 这里用到的最麻烦的一个东东就是C#操作IE浏览器.之前太孤陋

Selenium IDE录制登录操作,导出Java / Junit 4 / WebDriver

Selenium IDE可以录制简单的浏览器操作,然后导出成想要的对应的代码. 在用Selenium 2.46正式做一些事情之前,我打算先用IDE录制简单的登录操作,然后导出成Java代码,给自己后面直接写代码做个范例. [Selenium IDE下载] 上官网找到最新的IDE下载链接:http://release.seleniumhq.org/selenium-ide/2.9.0/selenium-ide-2.9.0.xpi [Selenium IDE安装] 打开FireFox浏览器 -> 附

python selenium系列(四)元素等待

一 前言 在前面的selenium系列(二)元素定位方式和selenium系列(三)常用操作类型及方法两节中,已经介绍了web页面元素的识别定位.操作等技术,可能你会觉得掌握这两项技术就可以实施web自动化了,答案基本是这样的,毕竟元素定位和操作是核心技术.但是,在某些场景,脚本的运行并非预期那样,如,要操作的元素用常规方法无法识别.元素可以识别但在脚本运行时却未如期而至等.为了解决这些疑难杂症,接下来三节内容将会介绍处理这些问题的通用方法. 在本节,主要介绍元素等待的使用方法和场景,该方法是开

Python操作远程数据库

我的项目要往数据库中插入create_time和update_time,那就势必要引用现在的系统时间,经过大量的查找,终于发现往python是没有对应时间datetime的相关通配符的,那么我们要怎么实现呢. 其实很简单,我们只需要把datetime转换成字符串类型的就行 def insertIntoChannel(self, user): conn = JDBCUtils.getConnection() cursor = conn.cursor() dt=datetime.datetime.n