《手把手教你》系列技巧篇(六十二)-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工具基础使用教程

相关文章
|
前端开发 测试技术 Python
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
本文分享了使用Selenium进行UI自动化测试的全过程,包括开发环境部署、代码实现、思路分析和难点解析。作者通过一个实际案例,讲述了如何利用Selenium处理前端生成报告失败的问题,以及在UI自动化中定位元素和处理元素不唯一的情况。同时,文章强调了解决问题思路的重要性,鼓励读者开拓思维,寻找不同的解决方案。
594 4
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
|
人工智能 Java 定位技术
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
本文详细讲解了Java开发者如何基于Spring AI Alibaba框架玩转MCP(Model Context Protocol),涵盖基础概念、快速体验、服务发布与调用等内容。重点包括将Spring应用发布为MCP Server(支持stdio与SSE模式)、开发MCP Client调用服务,以及在Spring AI Alibaba的OpenManus中使用MCP增强工具能力。通过实际示例,如天气查询与百度地图路线规划,展示了MCP在AI应用中的强大作用。最后总结了MCP对AI开发的意义及其在Spring AI中的实现价值。
3076 9
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
504 31
Selenium IDE:Web自动化测试的得力助手
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
1308 17
Selenium:强大的 Web 自动化测试工具
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
1127 9
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
965 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
Web App开发 编解码 Linux
使用Selenium自动化测试解决报告生成失败问题及Linux部署指南
这篇文章介绍了使用Selenium自动化测试解决报告生成失败问题的方法,包括Linux环境下的部署指南和代码实现。
407 1
使用Selenium自动化测试解决报告生成失败问题及Linux部署指南
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
2365 5
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。