Selenium 自动化 —— Selenium IDE录制、回放、导出Java源码

Hello Selenium 示例

之前我们在专栏的第一篇文章中演示了使用使用Selenium进行百度搜索的Hello world示例。
在这里插入图片描述

代码不复杂非常简单:

public static void main(String[] args) {WebDriver driver = null;try {// 设置Chrome驱动的路径
//            System.setProperty("webdriver.chrome.driver", "C:\\Softwares\\webdriver\\chromedriver-122\\chromedriver.exe");// 设置Chrome驱动程序版本WebDriverManager.chromedriver().setup();// 创建WebDriver对象driver = new ChromeDriver();// 打开百度网站driver.get("https://www.baidu.com");// 找到搜索输入框WebElement searchBox = driver.findElement(By.name("wd"));// 在搜索输入框中输入关键字searchBox.sendKeys("Hello World");// 提交搜索表单searchBox.submit();// 输出页面标题System.out.println("Page title is: " + driver.getTitle());} finally {// 关闭浏览器if(driver != null){driver.quit();}}}

但是对不懂HTML、CSS和Selenium API的同学,可能要编写一个完整的可运行的Selenium程序还是有一点点难度。

熟悉CSS和花了一点的时间看了我后续Selenium 系列教程的除外哈。

那么,有没有那种傻瓜式的开发Selenium的工具呢?
就像Visual Studio 可视化开发MFC程序一样,可视化拖拽开发

在这里插入图片描述

幸运的是,还真有!这就是Selenium大家族提供的Selenium IDE

什么是Selenium IDE

我们通常说的用来做自动化测试或爬虫的Selenium,其实不是一个单独的工具。

有点像 Spring 是一整套工具框架一样。

Selenium不仅仅是一个工具,而是一套软件,每个软件都有不同的方法来支持自动化测试。它由四个主要部分组成,包括:

  1. Selenium IDE:就是我们今天介绍的部分
  2. Selenium RC:允许测试人员用任何支持的编程语言编写自动化的web应用程序UI测试,注意已被Selenium正式弃用。
  3. WebDriver:前面我们已经简单介绍过了。
  4. Selenium Grid:也是Selenium Suite的一个重要组件,它允许我们在不同的机器上针对不同的浏览器并行运行测试。简而言之,我们可以在运行不同浏览器和操作系统的不同机器上同时运行我们的测试。后续我们会介绍。
    在这里插入图片描述

今天我们着重介绍Selenium IDE。
Selenium IDE (集成开发环境)是 Selenium 套件下的开源 web 自动化测试工具。不像 Selenium WebDriver 和 Selenium RC,它不需要任何编程逻辑来编写它的测试脚本,而是可以简单地记录与浏览器的交互来创建测试用例。随后,可以使用回放选项来重新运行测试用例

Selenium IDE 不是个单独的应用程序,而是作为 Firefox 和 Chrome 插件使用,这意味着我们不能在Firefox和Chrome以外的浏览器上使用。

记录的测试脚本也可以导出为编程语言,如c#、Java、Ruby或Python。
在这里插入图片描述

Selenium IDE安装

我们演示在Chrome中的安装

  1. 打开Chrome应用商城
    在这里插入图片描述
  2. 在商场中搜索Selenium IDE
    在这里插入图片描述
  3. 添加扩展程序
    在这里插入图片描述
  4. 右上角就点击打开Selenium IDE
    在这里插入图片描述
  5. 打开了Selenium IDE的窗口
    在这里插入图片描述
    这样我们就安装成功了

使用 Selenium IDE 录制脚本

接下来,我们使用Selenium IDE 录制一个百度搜索的例子。

  1. 打开Selenium IDE
    在这里插入图片描述

  2. 点击在新项目中记录新测试
    在这里插入图片描述

  3. 为项目命名
    在这里插入图片描述

  4. 输入我们要访问的URL
    在这里插入图片描述

  5. 点击开始录制,Chrome浏览器打开了一个新的窗口,进入了百度首页
    在这里插入图片描述

  6. 输入Hello World
    在这里插入图片描述

  7. 点击第一个展示的百度百科
    在这里插入图片描述

  8. 点击Selenium IDE右上角的红色终止按钮
    在这里插入图片描述

  9. 保存这个测试用例
    在这里插入图片描述

  10. 可以看到Command中把我们在录制期间的所有操作都记录下来了
    在这里插入图片描述

  11. 保存项目
    在这里插入图片描述

使用 Selenium IDE 回放脚本

前面我们录制了脚本,我们可以打开项目,回放之前的操作。

  1. 打开Selenium IDE插件
    在这里插入图片描述

  2. 打开一个存在的项目,也就是我们前面保存的工程
    在这里插入图片描述

  3. 点击按钮运行当前测试
    在这里插入图片描述

  4. 可以看到之前录制的所有操作都被自动执行了

    • 新打开了一个浏览器窗口
    • 打开百度首页
    • 搜索框输入Hello World
    • 点击搜索按钮,进入结果页面
    • 点击第一个百度百科词条
    • 进入百度百科页面

就是这么简单,所有都是自动完成的!
在这里插入图片描述

使用 Selenium IDE 转换成 Java 代码

再来一点更强大的,把录制的工程转换成 Java 源码。

  1. 打开前面的工程
  2. 在测试用例上点击设置图标
    在这里插入图片描述
  3. 选择导出
    在这里插入图片描述
  4. 选择导出为Java Junit
    在这里插入图片描述
  5. 于是我们得到了Java源码
// Generated by Selenium IDE
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.core.IsNot.not;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Alert;
import org.openqa.selenium.Keys;
import java.util.*;
import java.net.MalformedURLException;
import java.net.URL;
public class HelloideTest {private WebDriver driver;private Map<String, Object> vars;JavascriptExecutor js;@Beforepublic void setUp() {driver = new ChromeDriver();js = (JavascriptExecutor) driver;vars = new HashMap<String, Object>();}@Afterpublic void tearDown() {driver.quit();}public String waitForWindow(int timeout) {try {Thread.sleep(timeout);} catch (InterruptedException e) {e.printStackTrace();}Set<String> whNow = driver.getWindowHandles();Set<String> whThen = (Set<String>) vars.get("window_handles");if (whNow.size() > whThen.size()) {whNow.removeAll(whThen);}return whNow.iterator().next();}@Testpublic void helloide() {driver.get("https://www.baidu.com/");driver.manage().window().setSize(new Dimension(1127, 652));driver.findElement(By.id("kw")).click();driver.findElement(By.id("kw")).sendKeys("Hello world");driver.findElement(By.id("kw")).sendKeys(Keys.ENTER);vars.put("window_handles", driver.getWindowHandles());driver.findElement(By.cssSelector(".\\_aladdin_zc167_1 > .t span > span")).click();vars.put("win2836", waitForWindow(2000));driver.switchTo().window(vars.get("win2836").toString());}
}
  1. 把上面的代码复制到IDEA中去
  2. 引入相关的依赖
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
</dependency>
<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version>
</dependency>
  1. 自动生成的代码,还需要加入一行,配置 webdriver。
@Before
public void setUp() {System.setProperty("webdriver.chrome.driver", "C:\\Softwares\\webdriver\\chromedriver-122\\chromedriver.exe");driver = new ChromeDriver();js = (JavascriptExecutor) driver;vars = new HashMap<String, Object>();
}
  1. 运行测试类
    我们可以看到,自动打开了浏览器窗口,操作和我们录制和回放一模一样!

总结

到这里我们成功演示了Selenium 导出Java代码。观察一下自动生成的最核心的代码,和我们在Hello World示例中的代码没什么区别。

不过,如果再负责的需求场景下,比如解析页面拿到特定的元素内容,或者动态的交互,我们还是需要调用Selenium WebDriver 提供的API来实现!

接下来的章节,我们会重点学习这些API。关注我的 CSDN Postnull的Selenium 专栏,和我一起系统学习Selenium 自动化实现更多有趣的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/281911.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javaweb学习记录(三)请求响应案例

下面为一个请求响应案例&#xff0c;postman发送请求&#xff0c;服务器响应将一个xml文件中的数据通过读取解析&#xff0c;将其用Result类标准的格式返回前端&#xff0c;在前端用json的方式显示 后端Controller代码 1、通过本类的字节码文件得到类加载器并寻找到需要解析的…

如何使用 ArcGIS Pro 生成TIN

三角网是一种常用于表示地表地形的数字地球模型&#xff08;DEM&#xff09;方式&#xff0c;我们可以通过 ArcGIS Pro 将等高线和高程点转换为TIN&#xff0c;这里为大家介绍一下转换方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的高…

MATLAB环境下基于振动信号的轴承状态监测和故障诊断

故障预测与健康管理PHM分为故障预测和健康管理与维修两部分&#xff0c;PHM首先借助传感器采集关键零部件的运行状态数据&#xff0c;如振动信号、温度图像、电流电压信号、声音信号及油液分析等&#xff0c;提取设备的运行监测指标&#xff0c;进而实现对设备关键零部件运行状…

python 爬取杭州小区挂牌均价

下载chrome驱动 通过chrome浏览器的 设置-帮助-关于Google Chrome 查看你所使用的Chrome版本 驱动可以从这两个地方找: 【推荐】https://storage.googleapis.com/chrome-for-testing-publichttp://npm.taobao.org/mirrors/chromedriver import zipfile import os import r…

前端面试拼图-知识广度

摘要&#xff1a;最近&#xff0c;看了下慕课2周刷完n道面试题&#xff0c;记录并添加部分可参考的文档&#xff0c;如下... 1. 移动端H5 click有300ms延迟&#xff0c; 如何解决&#xff1f; 背景&#xff1a;double tap to zoom 移动端H5中的300ms点击延迟问题通常是由浏览…

【地图】腾讯地图 - InfoWindow 自定义信息窗口内容时,内容 html 嵌套混乱问题

目录 需求描述问题问题代码页面展示 解决原因解决办法解决代码页面展示 代码汇总注 需求描述 腾讯地图上画点位&#xff0c;点击点位展示弹框信息 问题 问题代码 // 打开弹框 openInfoWindow(position, content) {this.infoWindow new TMap.InfoWindow({map: this.map,posit…

当内外网的域名相同时,如何在外网解析同域名的网址

当内部网络和外部网络存在相同的域名&#xff0c;并且希望内部用户通过内部DNS服务器解析到外部网络上的该域名对应的公网IP地址时&#xff0c;需要在内部DNS服务器上采取一些特殊配置策略来实现这一目标。以下是一种通用的解决方案&#xff1a; 条件转发&#xff08;Condition…

初识GO语言

是由google公司推出的一门编程语言&#xff0c;12年推出的第一个版本 Go的特点 Go为什么能在最近的IT领域炙手可热 集python简洁&C语言的性能于一身 21世纪的C语言 顺应容器化时代的到来 区块链的崛起 学习一门编程语言可以划分为下面这三个步骤 安装 编译器 or 解…

使用华为云HECS服务器+nodejs开启web服务

简介: 在华为云HECS服务器上使用nodejs开启一个web服务。 目录 1.开通华为云服务器 2.远程登录 2.1 使用华为官方的网页工具登录 ​编辑 2.2 使用MobaXterm登录 3 安装node 3.1 下载 2. 配置环境变量 4. 安装express模块 5.开启外网访问 1.开通华为云服务器 这…

《大模型对齐方法》最新综述

源自&#xff1a;专知 “人工智能技术与咨询” 发布 大模型在人工智能领域取得了革命性的突破&#xff0c;但它们也可能带来潜在的担忧。为了解决这些担忧&#xff0c;引入了对齐技术&#xff0c;以使这些模型遵循人类的偏好和价值观。尽管过去一年取得了相当大的进展&#…

怎么做好独立站的SEO优化

随着全球贸易的蓬勃发展&#xff0c;越来越多的企业开始关注外贸市场&#xff0c;并将目光投向了外贸网站。然而&#xff0c;在竞争激烈的外贸市场中&#xff0c;如何写出吸引人的文章&#xff0c;以及如何优化网站以在搜索引擎中脱颖而出&#xff0c;成为了外贸独立网站必须面…

如何与手机共享笔记本电脑的互联网?这里提供详细步骤

这篇文章介绍了如何通过将手机变成Wi-Fi热点来与手机共享笔记本电脑的互联网连接。 如何共享笔记本电脑的互联网连接 你可以通过Wi-Fi或有线共享笔记本电脑的数据连接,具体取决于你的设置。 Windows Windows允许你通过ICS共享你的互联网连接。ICS,或称互联网连接共享,是W…

【Godot 4.2】常见几何图形、网格、刻度线点求取函数及原理总结

概述 本篇为ShapePoints静态函数库的补充和辅助文档。ShapePoints函数库是一个用于生成常见几何图形顶点数据&#xff08;PackedVector2Array&#xff09;的静态函数库。生成的数据可用于_draw和Line2D、Polygon2D等进行绘制和显示。因为不断地持续扩展&#xff0c;ShapePoint…

【创建进程】fork函数与写时拷贝

文章目录 fork函数fork如何返回两个值&#xff08;fork的工作原理&#xff09;如何解释父子进程相互输出printf 写时拷贝 fork函数 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 fork函…

LiveGBS流媒体平台GB/T28181功能-大屏播放上大屏支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放轮播

LiveGBS支持-大屏播放上大屏支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放轮播 1、轮播功能2、分屏展示3、选择轮播通道4、配置轮播间隔(秒)5、点击开始轮播6、轮播停止及全屏7、搭建GB28181视频直播平台 1、轮播功能 视频监控项目使用过程中&#xff0c;有时需要大屏…

Java 模拟Spring,实现IOC和AOP的核心(一)

在这里我要实现的是Spring的IOC和AOP的核心&#xff0c;而且有关IOC的实现&#xff0c;注解XML能混合使用&#xff01; 参考资料&#xff1a; IOC&#xff1a;控制反转&#xff08;Inversion of Control&#xff0c;缩写为IoC&#xff09;&#xff0c;是面向对象编程中的一种…

OpenLayers基础教程——使用WebGL加载海量数据(1)

1、前言 最近遇到一个问题&#xff1a;如何在OpenLayers中高效加载海量的场强点&#xff1f;由于项目中的一些要求&#xff0c;不能使用聚合的方法加载。一番搜索之后发现&#xff1a;OpenLayers中有一个WebGLPoints类&#xff0c;使用该类可以轻松应对几十万的数据量&#xf…

3D高斯泼溅的崛起

沉浸式媒体领域正在以前所未有的速度发展&#xff0c;其中 3D 高斯溅射成为一项关键突破。 这项技术在广泛的应用中看起来非常有前景&#xff0c;并且可能会彻底改变我们未来创建数字环境以及与数字环境交互的方式。 在本文中&#xff0c;我们将通过与摄影测量和 NeRF 等前辈进…

【软考高项】十五、信息系统工程之系统集成

1、集成基础 定义&#xff1a;通过硬件平台、网络通信平台、数据库平台、工具平台、应用软件平台将各类资源有机、高效地集成到一起&#xff0c;形成一个完整的工作台面 基本原则包括:开放性、结构化、先进性和主流化 2、网络集成 包括&#xff1a;传输子系统、交换子系统、…

Google的MELON: 通过未定位图像重建精确3D模型的突破性算法

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…