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;
  @Before
  public void setUp() {
    driver = new ChromeDriver();
    js = (JavascriptExecutor) driver;
    vars = new HashMap<String, Object>();
  }
  @After
  public 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();
  }
  @Test
  public 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 自动化实现更多有趣的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UnityShader(十八) 透明度测试

上代码&#xff1a; Shader "Shader入门/透明度效果/AlphaTestShader" {Properties{_MainTex ("Texture", 2D) "white" {}_CutOff("CutOff",Range(0,1))1}SubShader{Tags { "Queue""AlphaTest" "IgnorePro…

SpringBoot中使用MybatisX插件的详细过程

MybatisX 是一款针对 MyBatis 框架的 IntelliJ IDEA 的快速开发插件&#xff0c;旨在提高 MyBatis 开发效率的工具。它提供了一系列功能来简化 MyBatis 的配置和使用&#xff0c;包括 XML 文件的智能补全、快速跳转、代码生成等功能。 实现细节 &#xff08;1&#xff09;在I…

Milvus向量数据库检索

官方文档&#xff1a;https://milvus.io/docs/search.md   本节介绍如何使用 Milvus 搜索实体。   Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离&#xff0c;并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达…

最细致最简单的 Arm 架构搭建 Harbor

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; ARM离线版本安装 官方提供了一个 arm 版本&#xff0c;但是好久都没更新了&#xff0c;地址&#xff1a;https://github.com/goharbor/harbor-arm 。 也不知道为什么不更新&#xff0c;我看…

MySQL—基本操作

1.创建数据库 ①CREATE DATABASE schooldb; --不进行检查和设置默认字符集 ②CREATE DATABASE IF NOT EXISTS schooldb CHARSET utf8; --进行检查和设置默认字符集 CREATE DATABASE 创建数据库 IF NOT EXISTS 意为当前数据库不存在 CHARSET 意为设置数据库字符集…

Windows server 2008 R2 在VMware虚拟机上的安装

Windows server 2008 R2 在VMware虚拟机上的安装 准备工作VMware 新建并配置虚拟机安装和启动Windows server 2008 R2 准备工作 Windows server 2008 R2 ISO镜像的下载&#xff1a;Windows server 2008 R2 ISO VMware 新建并配置虚拟机 第一步&#xff0c;点击新建虚拟机 第…

语音控制模块_雷龙发展

一 硬件原理 1&#xff0c;串口 uart串口控制模式&#xff0c;即异步传送收发器&#xff0c;通过其完成语音控制。 发送uart将来自cpu等控制设备的并行数据转换为串行形式&#xff0c;并将其串行发送到接收uart&#xff0c;接收uart然后将串行数据转换为接收数据接收设备的并行…

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

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

Elasticsearch:全文搜索的利器

1. 简介 Elasticsearch是一个基于Lucene的分布式搜索引擎&#xff0c;能够支持准实时的数据检索NRT(near real-time),支持海量数据的处理&#xff0c;包括结构化和非结构化数据&#xff0c;提供强大的全文搜索能力&#xff0c;但是ES不仅仅是一个全文搜索引擎&#xff0c;他能…

如何利用IP地址分析风险和保障网络安全

随着网络攻击的不断增加和演变&#xff0c;保障网络安全已经成为了企业和组织不可忽视的重要任务。在这样的背景下&#xff0c;利用IP地址分析风险和建立IP风险画像标签成为了一种有效的手段。本文将深入探讨IP风险画像标签的作用以及如何利用它来保障网络安全。 IP风险画像查…

[LLM]大语言模型文本生成—解码策略(Top-k Top-p Temperature)

{"top_k": 5,"temperature": 0.8,"num_beams": 1,"top_p": 0.75,"repetition_penalty": 1.5,"max_tokens": 30000,"message": [{"content": "你好","role": "user&…

OpenCV实现OCR图片文本检测

一、操作步骤 把左边这样的图片&#xff0c;通过仿射变换转换成右边那样的图片。 然后再通过pytesseract读取图片内容得到图片中的文本就好了。 需要使用到&#xff1a; 仿射变换ocr识别 注&#xff1a;本文使用现成图片&#xff0c;轮廓检测较为明显&#xff0c;若是自己拍…

CTF题型 SSTI(1) Flask-SSTI-labs 通关 题记

CTF题型 SSTI(1) Flask-SSTI-labs 通关 题记 文章目录 CTF题型 SSTI(1) Flask-SSTI-labs 通关 题记前记获取键值或下标的方式获取属性的方式 Level 1 no wafLevel 2 bl[\{\{]Level 3 no waf and blindLevel 4 bl[[, ]]获取键值或下标 Level 5 bl[\, "]Level 6 bl[_]Level …

搭建 es 集群

一、VMware准备机器 首先准备三台机器 这里我直接使用 VMware 构建三个虚拟机 都是基于 CentOS7 然后创建新用户 部署 es 需要单独创建一个用户&#xff0c;我这里在构建虚拟机的时候直接创建好了 然后将安装包上传 可以使用 rz 命令上传&#xff0c;也可以使用工具上传 工…

Linux网络命令介绍30+

目录 一、网络命令 1. ifconfig 2. ip 3. traceroute 4. ping 5. route 6. netstat 7. ss 8. dig 9. arp 10. iwconfig 11. nslookup 12. host 13. whois 14. tracepath 15. curl 16. hostname 17. wget 18. mtr 19. iftop 20. iotop 21. tcpdump 22. i…

jenkins Pipeline接入mysql

背景&#xff1a; jenkin pipeline进化过程如下&#xff1a; Jenkins Pipeline 脚本优化实践&#xff1a;从繁琐到简洁 >>>>> Jenkins Pipeline脚本优化&#xff1a;为Kubernetes应用部署增加状态检测>>>>>> 使用Jenkins和单个模板部署多个K…

Nadaraya-Watson核回归

目录 基本原理 ​编辑 核函数的选择 带宽的选择 特点 应用 与注意力机制的关系 参考内容 在统计学中&#xff0c;核回归是一种估计随机变量的条件期望的非参数技术。目标是找到一对随机变量 X 和 Y 之间的非线性关系。 在任何非参数回归中&#xff0c;变量 Y 相对于变量…

量子加速超算简介

量子加速超算简介 有用的量子计算的发展是全球政府、企业和学术界的巨大努力。 量子计算的优势可以帮助解决世界上一些与材料模拟、气候建模、风险管理、供应链优化和生物信息学等应用相关的最具挑战性的问题。 要实现量子计算的优势&#xff0c;需要将量子计算机集成到现有的…

【算法与数据结构】二叉树(前中后)序遍历

文章目录 &#x1f4dd;前言&#x1f320; 创建简单二叉树&#x1f309;二叉树的三种遍历&#x1f320;前序&#x1f309;中序遍历 &#x1f320;后序遍历 &#x1f320;二叉树节点个数&#x1f309;二叉树节点个数注意点 &#x1f6a9;总结 &#x1f4dd;前言 一棵二叉树是结…

React的基本使用

安装VSCode插件 ES7 Reactopen in browser React基本使用 基本使用步骤 引入两个JS文件&#xff08; 注意引入顺序 &#xff09; <!-- react库, 提供React对象 --> //本地 <script src"../js/react.development.js"></script> //线上 //<scr…