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

简介: 【6月更文挑战第3天】本文介绍了在没有本地浏览器的情况下,如何使用RemoteWebDriver进行远程自动化测试。RemoteWebDriver分为客户端和服务端,客户端运行测试代码,服务端启动服务。服务端需要安装JDK、浏览器和对应的WebDriver,并启动selenium-server-standalone.jar。客户端通过URL连接到服务端,并指定预期的浏览器类型。这样,客户端的测试代码就能远程控制服务端的浏览器执行自动化测试。RemoteWebDriver的优点包括跨平台和浏览器测试、提高测试稳定性以及使测试环境和执行代码的机器分离。

1.简介

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

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

官方下载地址:https://www.selenium.dev/downloads/

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所有版本下载地址:https://www.chromedownloads.net/chrome64win/

【国外】浏览器版本和驱动版本对应关系查看网址:http://chromedriver.chromium.org/downloads

(2)geckodriver官方下载地址:https://github.com/mozilla/geckodriver/releases

说明:由于我下载的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工具基础使用教程

相关文章
|
16天前
|
存储 关系型数据库 测试技术
玩转n8n测试自动化:核心节点详解与测试实战指南
n8n中节点是自动化测试的核心,涵盖触发器、数据操作、逻辑控制和工具节点。通过组合节点,测试工程师可构建高效、智能的测试流程,提升测试自动化能力。
|
9天前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
118 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
3月前
|
Web App开发 存储 前端开发
Python+Selenium自动化爬取携程动态加载游记
Python+Selenium自动化爬取携程动态加载游记
|
3月前
|
XML jenkins 机器人
JMeter+Ant+Jenkins实现接口自动化测试持续集成
本文介绍了如何使用Ant生成JMeter接口测试报告,并集成到Jenkins中实现自动化测试。内容涵盖Ant与JMeter环境配置、build.xml文件设置、测试执行及报告生成,同时包括Jenkins插件安装、项目配置和钉钉消息通知的集成,帮助实现持续测试与结果可视化。
468 0
|
3月前
|
人工智能 前端开发 测试技术
如何让AI帮你做前端自动化测试?我们这样落地了
本文介绍了一个基于AI的UI自动化测试框架在专有云质量保障中的工程化实践。
1385 21
如何让AI帮你做前端自动化测试?我们这样落地了
|
3月前
|
Web App开发 开发框架 .NET
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行
Pytest 与 Playwright 集成可提升自动化测试效率,支持参数化测试、多浏览器并行执行及统一报告生成。通过数据驱动、Fixture 管理和并行优化,显著增强测试覆盖率与执行速度,适用于复杂 Web 应用测试场景。
|
2月前
|
人工智能 IDE 测试技术
Browser-Use在UI自动化测试中的应用
Browser-Use是一款浏览器自动化工具,具备视觉与HTML解析、多标签管理、操作记录与复现、自定义操作、自我纠正及并行执行等功能,助力AI智能体高效完成网页任务。
198 0
|
3月前
|
测试技术 API C++
Playwright 自动化测试系列(7)| 第三阶段:测试框架集成​​Page Object 模式
本课程详解Playwright测试框架中的Page Object模式,通过电商登录-下单实战演示PO架构设计与高级技巧,结合Pytest实现多用户测试。重点解析PO模式提升代码复用性、降低维护成本的核心价值,并提供常见问题解决方案,助力构建高可维护性的自动化测试体系。
|
4月前
|
JavaScript 测试技术 Python
UI自动化测试中的元素等待机制解析
在UI自动化测试中,元素定位失败常因页面存在iframe或缺乏合理等待机制。本文解析三种等待策略及其应用场景:显式等待可精确控制单个元素等待条件,支持自定义轮询;隐式等待全局生效,适合简单页面加载;强制等待仅用于临时调试,正式脚本慎用。通过对比三者执行精度、资源消耗及适用场景,帮助选择最优策略,提升测试效率与稳定性。
|
4月前
|
测试技术 Python
Python接口自动化测试中Mock服务的实施。
总结一下,Mock服务在接口自动化测试中的应用,可以让我们拥有更高的灵活度。而Python的 `unittest.mock`库为我们提供强大的支持。只要我们正确使用Mock服务,那么在任何情况下,无论是接口是否可用,都可以进行准确有效的测试。这样,就大大提高了自动化测试的稳定性和可靠性。
187 0

热门文章

最新文章