首页 > 编程语言 >《手把手教你》系列技巧篇(六十二)-java+ selenium自动化测试-RemoteWebDriver让你的代码与测试分离(远程测试)(详细教程)

《手把手教你》系列技巧篇(六十二)-java+ selenium自动化测试-RemoteWebDriver让你的代码与测试分离(远程测试)(详细教程)

时间:2024-03-31 09:30:40浏览次数:19  
标签:浏览器 宏哥 selenium 测试 服务器 java 客户端

1.简介

当本机上没有浏览器,需要远程调用浏览器进行自动化测试时,需要用到RemoteWebDirver。宏哥申请服务器还没有下来,也懒得自己在本地安装虚拟机,等的时间太长了于是就网上找了一个可以免费试用2天的服务器(网址:Dedicated Server Hosting Service | Bare Metal | Varidata),注册一下基本上几个小时后,就可以用了有兴趣的你也可以自己申请一个。文章中可能前后的服务器不一样,所以截图有点瑕疵,抱歉啊。

2.RemoteWebDriver简介

RemoteWebDriver包括两部分:客户端和服务端

   1)客户端就是我们要运行测试用例(脚本)

   2)服务端就是我们启动的服务

3.应用场景

想像一下最简单的一个应用场景:你和你的同事两人一起开发一段webdriver脚本,然后你们需要在一个公共的环境去运行这段脚本。为什么要在公共的环境运行?那是因为每个人的开发机器是有差异的,但是如果用同一台测试机的话,那么环境差异的因素就可以基本排除。我们应该经常听到开发说这样的话:"这个bug在我的环境上是好的啊!"。因为运行环境不同而造成的bug比比皆是,因此我们需要一个统一的运行环境来消除差异。这样就不会出现"这个bug在我的环境上是好的啊!"类似的问题了。
在这样的应用场景下,我们就需要使用remote webdriver,我们在本地开发脚本,然后调用remote webdriver,在测试机器上执行我们的测试。

4.RemoteWebDriver优缺点

(1)更方便跨平台、浏览器的测试;

(2)测试更加稳定;(在本地启动浏览器测试时,可能会由于相关操作导致测试不稳定);

(3)RemoteWebDriver使测试用例和被测的浏览器可以不用部署在同一台机子上,比如当前运行测试用例的本地没有浏览器a,你又想用a去跑,可以通过发送远程命令到远程有 a浏览器的测试机去跑,省在搭环境,但缺点是从远端服务端发送来的字符串可能存在结尾符号不兼容问题,还有就是会增加网络延时。

(4)可以使执行测试的机器和发送测试命令的机器独立开来,比如A机器,是写测试代码的机器,可以发送测试命令给服务器,可以理解为客户端;B机器是执行测试代码的机器,可以理解为服务器端,A发送命令给B,然后再B上面执行测试,并返回结果给A。

5.环境准备

1. 安装JDK(jdk1.8.0_101),这个需要在客户端和服务端都需要安装,客户端需要运行java代码,而服务端需要启动一个java的jar包服务,所以都需要安装JDK并配置环境变量;

2. 下载安装firefox,chrome浏览器 ;

3. 下载selenium-server-standalone.jar (官方下载地址);

4. 下载InternetExplorerDriver,ChromeDriver,geckodriver(selenium3.0以及之后的版本支持的firefox driver);

5.  两台机器,一台作为客户端,一台作为服务器端。

6.服务端配置

6.1安装JDK

  安装jdk,宏哥这里在服务器安装的是1.8,将环境变量配置好(可以参考宏哥这篇文章:https://www.cnblogs.com/du-hong/p/11670441.html其中有如何配置JDK的环境变量方法)。好像selenium-server3.0.0以上版本需要依赖java8(这个没有验证过),如果大家在启动server的过程中报错,可以尝试将jdk修改为1.8或者更高版本试一下。如下图所示:

6.2安装firefox,chrome浏览器

 这个宏哥在这里就不赘述了,直接下载安装包,傻瓜式安装即可。

6.3下载selenium-server-standalone.jar

官方下载地址:Downloads | Selenium

6.4下载浏览器驱动

下载chromedriver,geckodriver(selenium3.0以及之后的版本支持的firefox driver)

(1)chromedriver官方下载地址:

【国外】chromedriver所有版本下载地址:http://chromedriver.storage.googleapis.com/index.html

【国内】chromedriver所有版本下载地址:https://npm.taobao.org/mirrors/chromedriver

【国内】chrome所有版本下载地址:Google Chrome 64bit Windows版_chrome浏览器,chrome插件,谷歌浏览器下载,谈笑有鸿儒

【国外】浏览器版本和驱动版本对应关系查看网址:ChromeDriver - WebDriver for Chrome - Downloads

(2)geckodriver官方下载地址:Releases · mozilla/geckodriver · GitHub

说明:由于我下载的serverselenium-server-standalone.jar是3.141.59版本的,所以这里需要下载geckodriver,如果你本机的server不是3.0.0以及之后的版本,则不用单独下载firefox driver(geckodriver),可以直接使用selenium客户端的老版本的firefoxdriver。

如果是跟随宏哥的教程学习的小伙伴或者童鞋们,其中第一步、第二步、第三步和第四步你可以直接将你本机中的JDK安装目录文件、Chrome安装目录文件、Eclipse中的selenium-server-standalone-3.141.59.jar和浏览器驱动直接拷贝到服务端即可!宏哥为了省事就直接拷贝到服务器上,这样就不用担心版本匹配的问题了,因为你已经在你本地验证过了如下图所示:

(1)本机(客户端)的JDK:

 (2)本机(客户端)的Chrome:

 (3)本机(客户端)的jar和浏览器驱动:

(1)服务器的Chrome:

(2)服务器的JDK、jar和浏览器驱动:

7.客户端和服务器的操作

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

7.1服务器端

为了保持测试环境一致,所以我们将测试环境部署在服务器上,代码在本地也就是客户端【测试环境放在服务器上,执行代码的机器为客户机】

7.2服务器操作

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

2. 启动独立测试jar包(注意JAR包的版本号),如果是配置了JDK的环境变量直接使用下边的命令就可以

java -jar C:\Java\selenium-server-standalone-2.46.0.jar

3.如果没有配置,则需要进入JDK安装目录下的bin文件夹中,然后在路径输入框,输入cmd回车,或者直接使用命令进入bin文件夹目录,然后再使用上边的命令。宏哥这里在服务器就没有配置(因为临时演示就懒得配置)。

4. 命令启动的端口默认是4444,如果被占用了,你可以指定端口启动,命令如下:

java -jar C:\Java\selenium-server-standalone-2.46.0.jar -port 5566

7.3客户端

客户端操作

1. 验证服务端响应是否正常。在浏览器中输入地址:http://服务器IP地址:端口/wd/hub/ ,显示如下页面。

8.远程测试

8.1代码设计

测试代码,通过RemoteWebDriver调用服务器

8.2参考代码
package lessons;

import java.io.File;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.apache.commons.io.FileUtils;

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥(微信搜索:北京宏哥,关注宏哥公众号,提前解锁更多测试干货)
 * 
 * @《手把手教你》系列技巧篇(六十二)-java+ selenium自动化测试-RemoteWebDriver让你的代码与测试分离(远程测试)(详细教程) 
 *
 * @2022年1月21日
 */
public class Remote {
    
    
        public static void main(String[] args) throws Exception {
            // RemoteWebDriver的基本使用

            //第一个参数:表示服务器的地址。第二个参数:表示预期的执行对象,其他的浏览器都可以以此类推
            WebDriver driver = new RemoteWebDriver(new URL("http://103.194.186.114:5566/wd/hub/"), DesiredCapabilities.chrome());
            driver.manage().window().maximize();
            driver.get("http://www.baidu.com");
            Thread.sleep(2000);
            
            System.out.println("开始");
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); //转换时间格式
            String time = dateFormat.format(Calendar.getInstance().getTime()); //获取当前时间
            File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); //执行屏幕截取
            FileUtils.copyFile(srcFile, new File("屏幕截图", time + ".png")); //利用FileUtils工具类的copyFile()方法保存getScreenshotAs()返回的文件;"屏幕截图"即时保存截图的文件夹
            Thread.sleep(2000);
            JavascriptExecutor js = (JavascriptExecutor)driver;
            js.executeScript("alert('我现在在服务器')");
            Thread.sleep(5000);
            System.out.println("browser will be close");
            driver.quit();
       }

}
8.3运行代码

1.运行代码,右键Run AS->Java Appliance,控制台输出,如下图所示:

2.运行代码后服务端的浏览器的动作,如下小视频所示:

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

9.小结

1.今天讲解的其实也很简单,说白了就是将你本地的测试环境在服务器上部署一套,然后通过服务器的IP,本地通过RemoteWebDriver类来远程控制服务器。注意浏览器驱动的环境变量的配置,否则就会找不到驱动.如果为了省事可以直接将驱动复制到system32的文件夹下就可以。如下图所示:

2.端口被占用,启动服务报错,如下图所示:

3.宏哥复制Chrome浏览器时,直接复制到服务器的C盘的根目录,结果报如下图错误:

 解决办法:,宏哥将其复制到服务器的:C:\Program Files (x86)目录下,成功运行。

 最后一个的报错,网上有的说是服务器端的浏览器没有关闭,关闭就可以了,宏哥专门打开浏览器,运行了一下代码,正常运行,感觉和这个浏览器是否关闭没有关系。

 每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问)或者微信搜索: 北京宏哥  公众号提前解锁更多干货。

Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

标签:浏览器,宏哥,selenium,测试,服务器,java,客户端
From: https://blog.csdn.net/qq_23827149/article/details/137139041

相关文章

  • 《手把手教你》系列技巧篇(六十一)-java+ selenium自动化测试 - 截图三剑客 -下篇(详细教
    1.简介按照计划宏哥今天将介绍java+selenium自动化测试截图操作实现的第三种截图方法,也就是截图的第三剑客-截取某个元素(或者目标区域)的图片。在测试的过程中,有时候不需要截取整个屏幕,只需要截取某个元素(或者目标区域)的图片,今天宏哥就来讲解和分享这些内容。2. 截取某个......
  • Java学习计划和之后的规划
    Java是一种广泛使用的编程语言,以其“一次编写,到处运行”的能力而闻名。对初学者来说,学习Java可以是一个既充满挑战又充满回报的旅程。以下是一份详细的学习计划,可帮助初学者入门并在Java编程世界中稳步前进。##第一阶段:基础入门(1-3个月)###目标-理解Java的基础概念和语法......
  • Java的心脏:深入解析Java虚拟机、进程与线程的精妙互动
    一、定义进程(Process)和线程(Thread)是操作系统中非常基础且重要的概念,它们对于理解程序的执行、资源分配和并发编程至关重要。我将从操作系统(OS)和Java编程语言的角度来详细解释这两个概念。从操作系统的角度进程:定义:进程是操作系统进行资源分配和调度的基本单位。它是一......
  • ssm656基于JAVA的校园失物招领平台的设计与实现
    ......
  • Linux服务器准备java运行环境
    安装JAVA下检查是否安装了JAVAjava-version提示"java:commandnotfound"则表示没有安装,如果安装了会显示JAVA版本信息CentOS安装JAVAsudoyuminstalljava-11-openjdk-devel 安装完成再执行一下:java-version 说明安装成功,没问题设置环境变量设置JAVA_HO......
  • 8分钟搞懂Java中的各种锁
    转载请注明出处❤️作者:测试蔡坨坨原文链接:caituotuo.top/f9fc66cb.html前言你好,我是测试蔡坨坨。在前几篇Redis相关文章中都说到了锁,同时我们在参加设计评审或者codeReview时也会接触到关于加锁的问题。因此,作为测试人员,还是很有必要搞懂相关的锁机制。你是否背了很多关于锁......
  • Java经典垃圾回收器介绍
    先看总结:垃圾回收器分类作用位置使用算法特点适用场景Serial串行新生代复制算法响应速度优先适用于单CPU环境下的Client模式ParNew并行新生代复制算法响应速度优先多CPU环境Server模式下与CMS配合使用Parallel......
  • 【Web应用技术基础】JavaScript(1)——案例:猜数字
    因为不能插入视频,所以给大家一张一张截图的点击“重新开始一局游戏” <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">......
  • java9到java17的新特性学习--github新项目
    ......
  • Java反射
    1.反射的基本概念Java的反射(reflection)机制是在运行状态中对于任意一个类,都能够知道这个类的所有属性和方法,反射允许对成员变量、成员方法、构造方法的信息进行编程式访问。这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。反射允许对成员......