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

相关文章
|
5月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
564 0
|
10月前
|
缓存 监控 负载均衡
如何提升 API 性能:来自 Java 和测试开发者的优化建议
本文探讨了如何优化API响应时间,提升用户体验。通过缓存(如Redis/Memcached)、减少数据负载(REST过滤字段或GraphQL精确请求)、负载均衡(Nginx/AWS等工具)、数据压缩(Gzip/Brotli)、限流节流、监控性能(Apipost/New Relic等工具)、升级基础设施、减少第三方依赖、优化数据库查询及采用异步处理等方式,可显著提高API速度。快速响应的API不仅让用户满意,还能增强应用整体性能。
|
6月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
233 0
|
6月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
604 5
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
391 31
Selenium IDE:Web自动化测试的得力助手
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
824 17
Selenium:强大的 Web 自动化测试工具
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
2158 5