【自动化测试】【Jest-Selenium】(04)—— Selenium WebDriver
时间:2022-07-26
本文章向大家介绍【自动化测试】【Jest-Selenium】(04)—— Selenium WebDriver,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. Selenium WebDriver 是什么?
Selenium is an umbrella project(一揽子项目) for a range of tools and libraries that enable and support the automation of web browsers.
- It provides extensions to emulate user interaction with browsers, a distribution server for scaling browser allocation, and the infrastructure for implementations of the W3C WebDriver specification that lets you write interchangeable code for all major web browsers.
- At the core of Selenium is WebDriver, an interface to write instruction sets that can be run interchangeably in many browsers.
2. 安装?
Selenium Installation 分两步:
- 选择一种测试脚本编程语言(Java、JavaScript、Ruby 等)。(这里选的是 JavaScript)
- 安装与浏览器对应的 WebDriver 驱动包。(这里选的是 Chrome 版驱动)
- 下载地址:https://chromedriver.storage.googleapis.com/index.html
- 配置 WebDriver 驱动包的 PATH 变量
3. 编写脚本
3.1. 创建浏览器会话(Chrome)
const {Builder} = require('selenium-webdriver');
(async function myFunction() {
let driver = await new Builder().forBrowser('chrome').build();
//your code inside this block
})();
3.2. 页面导航控制(加载指定测试页面)
await driver.get('https://selenium.dev');
注:通常页面导航后,需要等到某个东西初始化完成,才能开始测试,所以需要用到 Selenium WebDriver 的 Waits 技能:
await driver.get('file:///race_condition.html');
// 等待检测到变量 initialised 为 true 时,再进行后续测试
await driver.wait(() => driver.executeScript('return initialised'), 10000);
const element = driver.findElement(By.css('p'));
assert.strictEqual(await element.getText(), 'Hello from JavaScript!');
3.3. 查找 DOM 元素
// Find Element
let searchBar = driver.findElement(By.name('q'));
// Find Elements
let elements = await driver.findElements(By.css('p'));
for(let e of elements) {
console.log(await e.getText());
}
// Find Element From Element
WebElement searchForm = driver.findElement(By.tagName("form"));
WebElement searchBox = searchForm.findElement(By.name("q"));
// Find Elements From Element
let element = driver.findElement(By.css("div"));
let elements = await element.findElements(By.css("p"));
for(let e of elements) {
console.log(await e.getText());
}
3.4. 获取元素属性
let element = await driver.findElement(By.css("div"));
const fontWeight = await element.getCssValue("font-weight"); // CSS 样式
const readonly = await element.getAttribute("readonly"); // 只读属性
3.5. 模拟键盘动作
- sendKeys
- The sendKeys types a key sequence in DOM element even if modifier key sequence is encountered. Here are the list of possible keystrokes that WebDriver Supports.
const searchBtn = await driver.findElement(By.name('q'))
await searchBtn.sendKeys('webdriver', Key.ENTER);
- clear
- Clears the content of an editable element. This is only applied for the elements which is editable and interactable, otherwise Selenium returns the error (invalid element state (or) Element not interactable)
3.6. 模拟鼠标动作
- clickAndHold
let searchBtn = driver.findElement(By.linkText("Sign in"));
const actions = driver.actions({async: true});
// Perform mouseMove to element and mouseDown (press) action on the element
await actions.move({origin:searchBtn}).press().perform();
- contextClick
let searchBtn = driver.findElement(By.linkText("Sign in"));
const actions = driver.actions({async: true});
// Perform context-click action on the element
await actions.contextClick(searchBtn).perform();
- doubleClick
let searchBtn = driver.findElement(By.linkText("Sign in"));
const actions = driver.actions({async: true});
// Perform double-click action on the element
await actions.doubleClick(searchBtn).perform();
- moveToElement
let gmailLink = driver.findElement(By.linkText("Gmail"));
const actions = driver.actions({async: true});
// Performs mouse move action onto the element
await actions.move({origin:gmailLink}).perform();
- release
// Store 'box A' as source element
let sourceEle = driver.findElement(By.id("draggable"));
// Store 'box B' as source element
let targetEle = driver.findElement(By.id("droppable"));
const actions = driver.actions({async: true});
await actions.move({origin:sourceEle}).press().perform();
// Performs release event on target element
await actions.move({origin:targetEle}).release().perform();
3.7. alert 窗口控制
//Click the link to activate the alert
await driver.findElement(By.linkText('See an example alert')).click();
// Wait for the alert to be displayed
await driver.wait(until.alertIsPresent());
// Store the alert in a variable
let alert = await driver.switchTo().alert();
//Store the alert text in a variable
let alertText = await alert.getText();
//Press the OK button
await alert.accept();
4. 效果展示
参考:
Selenium WebDriver 下载页: https://www.selenium.dev/documentation/en/webdriver/driver_requirements/ Chrome 版 WebDriver 下载地址: https://chromedriver.storage.googleapis.com/index.html Selenium WebDriver -> Waits: https://www.selenium.dev/documentation/en/webdriver/waits/
- 【Go 语言社区】Golang 语言获取本机逻辑CPU数量的方法
- Data Guard搭建困境突围(一)(r10笔记第17天)
- Java基础-day07-知识点相关题-自定义数据类型;ArrayList
- windows10 tensorflow(二)原理实战之回归分析,深度学习框架(梯度下降法求解回归参数)
- 本人为巨杉数据库(开源NoSQL)写的C#驱动,支持Linq,全部开源,已提交github
- 最近的几个技术问题总结和答疑(九)(r10笔记第16天)
- AgileEAS.NET SOA中间件平台更新日志 2015-04-28
- 【Go 语言社区】Golang语言操作redis连接池的方法
- 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载
- 关于Flashback的小测试(r10笔记第15天)
- 分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载
- 【Go 语言社区】Golang语言获取系统环境变量的方法
- Oracle中的PUBLIC(r10笔记第14天)
- Data Guard高级玩法:通过闪回恢复switchover主库 (r10笔记第13天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一键生成你的微信社交数据报告
- 分析OutOfMemoryError异常
- 用 Python 制作关不掉的端午安康弹窗
- 使用JFR分析性能问题
- MyISAM 迁移至 InnoDB方案
- 解决Seafile局域网访问失败
- 一键解锁网易云音乐变灰歌曲
- 彻底理解 IO多路复用
- 分享Apache环境禁止目录浏览的方法
- DB2 Linux平台安装 Part 1 Linux环境配置
- DB2 Linux平台安装 Part 2 单机版软件安装
- DB2 Linux平台安装 Part 3 实例的建立与配置
- C++核心准则Con.2:默认情况下,将成员函数定义为const类型
- C++核心准则Con.3:默认情况下,传递参照常量的指针或引用
- C++核心准则Con.4:如果一个对象在构建之后值不会改变,使用const定义它