Selenium自动化(上)

Selenium 安装

环境准备

第一种方式

Python 自带的 pip 工具安装。

pip install selenium==4.12.0

安装完成后,查看安装的 Selenium 版本号。

pip show selenium

第二种方式

安装 Selenium 的前提是拥有 Python 开发环境(推荐使用 PyCharm)。Selenium 是 Python 的第三方库,可采用 PyCharm 自带方式安装。

菜单栏 File -> Settings 进入配置界面

搜索 Selenium -> Install Package。(选择4.12.0版本)

Selenium 支持多种浏览器,需要下载对应的浏览器版本的驱动,将浏览器驱动位置设置到环境变量。

各个浏览器驱动下载地址:https://ceshiren.com/t/topic/3275

在 Python 文件中编写代码,如果程序能够调起相应浏览器,说明安装成功。

实战演示

  • 使用 Chrome 浏览器
    # 导入Selenium的webdriver模块
    from selenium import webdriver
    # 创建Chrome浏览器的选项对象,并最大化窗口
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    # 初始化Chrome浏览器驱动
    driver = webdriver.Chrome(options=options)
    # 打开网页
    driver.get('https://www.ceshiren.com')
    # 关闭浏览器
    driver.quit()
    
  • 使用 Firefox 浏览器
    # 导入Selenium的webdriver模块
    from selenium import webdriver
    # 创建Firefox浏览器的选项对象,并最大化窗口
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    # 初始化Firefox浏览器驱动
    driver = webdriver.Chrome(options=options)
    # 打开网页
    driver.get('https://www.ceshiren.com')
    # 关闭浏览器
    driver.quit()
    

这段代码运行后会自动化的创建一个 Chrome 进程。

Selenium Manager 为 Selenium 提供自动化的驱动程序和浏览器管理。Selenium 绑定默认使用此工具,因此无需下载。也无需在代码中添加任何内容或进行其他操作即可使用它。

官网地址:https://www.selenium.dev/documentation/selenium_manager/

自动浏览器管理

Selenium Manager自动检查浏览器驱动是否安装,如果安装正确,则使用此驱动,如果不是,Selenium Manager将管理CfT,无论哪种情况,浏览器最终也会受到管理。

总结:无需手动更新driver。

  • Chrome:基于Chrome for Testing(CfT)从Selenium 4.11.0开始。
  • Firefox:基于公开的Firefox版本,从Selenium 4.12.0开始。

Selenium IDE 是一个浏览器扩展,用于记录和回放用户的操作。

Selenium的集成开发环境(Selenium IDE)是一个易于使用的浏览器扩展,使用现有的 Selenium 命令记录用户在浏览器中的操作,参数由每个元素的上下文定义。它提供了学习 Selenium 语法的绝佳方式。它适用于 Google Chrome、Mozila Firefox和Microsoft Edge。

虽然 Selenium IDE 可以帮我们生成代码、录制回放、元素定位等功能,但是缺点也很明显:

录制回放方式的稳定性和可靠性有限。 只支持 Firefox、Chrome。 对于复杂的页面逻辑其处理能力有限。

使用场景

  • 刚开始入门UI自动化测试
  • 团队代码基础较差
  • 技术成长之后学习价值不高

注意:Selenium IDE 更适合简单的自动化测试任务,对于复杂的测试需求和更高级的自动化任务,需要使用 WebDriver 或其他自动化工具。

环境准备

官网:

https://www.selenium.dev/

Chrome 插件:

https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd

Firefox 插件:

https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/

github release:

https://github.com/SeleniumHQ/selenium-ide/releases

其它版本:

https://addons.mozilla.org/en-GB/firefox/addon/selenium-ide/versions/

注意:Chrome插件在国内无法下载,Firefox可以直接下载。

安装完成后,通过在浏览器的菜单栏中点击图标启动。

创建项目

安装完成后,通过在浏览器的菜单栏中点击图标来启动。

如果没看到图标,首先确保是否安装了 Selenium IDE 扩展插件,可以通过点击菜单栏扩展程序按钮,找到并启动 Selenium IDE。 1. 点击 Selenium IDE 图标

![Alt text](assets/image.png){: width="60%"}
  1. 创建一个新项目

  2. 输入项目名称

  3. 进入界面

Selenium IDE常用功能

  1. 新建、保存、打开
  2. 开始和停止录制
  3. 运行8中的所有的实例
  4. 运行单个实例
  5. 调试模式
  6. 调整案例的运行速度
  7. 要录制的网址
  8. 实例列表
  9. 动作、目标、值
  10. 对单条命令的解释
  11. 运行日志

实战演示

录制第一个测试用例
  1. 创建新项目后,取名为 hogwarts_demo1

  2. 点击录制按钮,然后需要填写 URL(要录制测试脚本的网站 URL),这里使用的是 https://ceshiren.com/

  3. 完成设置后,将打开一个新的浏览器窗口,加载 URL 并开始录制脚本。在页面上的操作都将记录在 IDE 中。操作完成后,切换到 IDE 窗口并单击停止录制按钮。 

  4. 停止后,为刚录制的测试用例取名ceshiren_demo1

导出用例结构分析

利用 Selenium IDE 导出 Python pytest 格式代码,导出用例代码如下:

Python 演示代码

#注释是由 Selenium IDE 生成的代码
# Generated by Selenium IDE
#导入可能用到的依赖
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestCeshirendemo1():
  # setup_module()只会在开始测试运行一次
  def setup_method(self, method):
    # 初始化webdriver
    self.driver = webdriver.Chrome()
    self.vars = {}

  # teardown_module()只会在结束测试运行一次
  def teardown_method(self, method):
    # 关闭浏览器并关闭启动 ChromeDriver 时启动的 ChromeDriver 可执行文件
    self.driver.quit()

  # 测试方法
  def test_ceshirendemo1(self):
    # 访问网址
    self.driver.get("https://ceshiren.com/")
    # 设置窗口大小
    self.driver.set_window_size(1382, 744)
    # 点击操作
    self.driver.find_element(By.LINK_TEXT, "类别").click()
    # 设置等待时间为2秒
    time.sleep(2)
    # 关闭当前窗口
    self.driver.close()

这段代码就简单的实现了对浏览器操作的自动化。

保存

单击 IDE 右上角的 save 图标,输入项目的保存名称和地址。

回放

选择想要回放的测试用例,单击 play 按钮,在 IDE 中回放测试。

控件定位

如果想定位其他的控件,只需要点击图中的箭头,点击后就会跳转到浏览器,然后点击想要定位的控件,Target 的值就会出现相应的定位表达式(见图3-8)。

Web 浏览器控制

简介

在 Web 自动化测试中,经常需要模拟用户在浏览器中的操作来完成一些测试任务,通过编程方式操作和控制浏览器的行为,以便自动化执行各种操作。例如: - 打开网页 - 刷新 - 回退 - 最大化 - 最小化

浏览器控制

  • 模拟功能测试中对浏览器的操作 | | 操作 | 使用场景 | | --- | --- | --- | | get | 打开浏览器 | web 自动化测试第一步 | | refresh | 浏览器刷新 | 模拟浏览器刷新 | | back | 浏览器退回 | 模拟退回步骤 | | maximize_window | 最大化浏览器 | 模拟浏览器最大化 | | minimize_window | 最小化浏览器 | 模拟浏览器最小化 |
打开网页
  • get() 方法打开浏览器
    # 导入Selenium的webdriver模块
    from selenium import webdriver
    
    def window_start():
        # 创建Chrome浏览器的选项对象
        options = webdriver.ChromeOptions()
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        window_start()
    
刷新页面
  • refresh() 方法刷新页面
    # 导入Selenium的webdriver模块
    import time
    
    from selenium import webdriver
    
    def window_refresh():
        # 创建Chrome浏览器的选项对象
        options = webdriver.ChromeOptions()
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        # 等待1秒
        time.sleep(1)
        # 刷新页面
        driver.refresh()
        time.sleep(1)
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        window_refresh()
    
回退
  • 用 back() 方法回退到上一个界面
    # 导入Selenium的webdriver模块
    import time
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    
    def window_back():
        # 创建Chrome浏览器的选项对象
        options = webdriver.ChromeOptions()
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        driver.find_element(By.XPATH,"//*[text()='类别']").click()
        time.sleep(1)
        driver.back()
        time.sleep(1)
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        window_back()
    
最大化
  • maximize_window() 方法使窗口最大化
    import time
    
    from selenium import webdriver
    
    def max_window():
        # 创建Chrome浏览器的选项对象
        options = webdriver.ChromeOptions()
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        # 窗口最大化
        driver.maximize_window()
        time.sleep(3)
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        max_window()
    
最小化
  • minimize_window() 方法使窗口最小化
    import time
    
    from selenium import webdriver
    
    def min_window():
        # 创建Chrome浏览器的选项对象
        options = webdriver.ChromeOptions()
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        # 窗口最小化
        driver.minimize_window()
        time.sleep(2)
        # 窗口最大化
        driver.maximize_window()
        time.sleep(3)
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        min_window()
    
设置浏览器宽和高
  • set_window_size(宽, 高):设置浏览器的宽和高。
    import time
    
    from selenium import webdriver
    
    def set_window_size():
        # 创建Chrome浏览器的选项对象,并最大化窗口
        options = webdriver.ChromeOptions()
        options.add_argument("--start-maximized")
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        driver.set_window_size(500,500)
        time.sleep(2)
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        set_window_size()
    

总结

  • get():打开浏览器。
  • refresh():刷新浏览器。
  • back():回退到上一个页面。
  • maximize_window():浏览器窗口最大化。
  • minimize_window():浏览器窗口最小化。
  • set_window_size(宽, 高):设置浏览器的宽和高。

常见控件定位方法

简介

在 Web 自动化测试中,定位是指在进行测试过程中定位网页上的元素(如按钮、文本框、下拉菜单等),以便进行操作。定位是自动化测试中的关键步骤,它使测试工具能够找到并与页面上的元素进行交互。

为什么要学习定位

  • 自动化测试必需:在自动化测试中,测试脚本需要与页面上的元素进行交互,如点击按钮、输入文本等。
  • 元素可能随时间改变:Web 页面的结构可能会随时更改,例如元素的 ID、Class Name等可能会变化。掌握不同的定位方式可以在元素属性变化时,灵活地修改测试脚本而不影响稳定性。
  • 提高测试脚本的可维护性:如果只依赖一种定位方式,当页面结构发生变化时,测试脚本可能会失效。多掌握定位方式可以根据情况选择最合适的定位方式,提高脚本的可维护性。

Selenium 八大定位方式

Selenium提供了八种定位方式 https://www.selenium.dev/documentation/webdriver/elements/locators/

定位方式描述
class nameclass属性对应的值
css selector(重点)css表达式
id(重点)id属性对应的值
name(重点)name属性对应的值
link test查找其可见文本与搜索值匹配的锚元素
partial link test查找其可见文本包含搜索值的锚元素。如果多个元素匹配,则只会选择第一个元素
tag name标签名称
xpath(重点)xpath表达式
  • 格式 - driver.find_element_by_定位方式(定位元素)

    driver.find_element_by_id("su")
    
    driver.find_element(By.定位方式, 定位元素)官方建议
    driver.find_element(By.ID, "su")
    

    创建定位器

    要使用Selenium在网页上操作网页元素,需要找到它们在网页上的位置。Selenium提供了上述提到的方式,通过这些方式可以在页面上定位元素。为了理解和创建定位器,我们将使用以下HTML代码片段。

<html>
<body>
<style>
.information {
  background-color: white;
  color: black;
  padding: 10px;
}
</style>
<h2>Contact Selenium</h2>

<form action="/action_page.php">
  <input type="radio" name="gender" value="m" />Male &nbsp;
  <input type="radio" name="gender" value="f" />Female <br>
  <br>
  <label for="fname">First name:</label><br>
  <input class="information" type="text" id="fname" name="fname" value="Jane"><br><br>
  <label for="lname">Last name:</label><br>
  <input class="information" type="text" id="lname" name="lname" value="Doe"><br><br>
  <label for="newsletter">Newsletter:</label>
  <input type="checkbox" name="newsletter" value="1" /><br><br>
  <input type="submit" value="Submit">
</form> 

<p>To know more about Selenium, visit the official page 
<a href ="www.selenium.dev">Selenium Official Page</a> 
</p>

</body>
</html>
class name

HTML 页面的元素可以具有class属性,可以通过使用Selenium中提供的class name 来识别这些元素。

driver.find_element(By.CLASS_NAME, "information")
css selector

CSS是用于给HTML页面添加样式的语言。通过使用CSS选择器定位策略来识别页面上的元素。如果元素有一个ID,优先选择使用 id 进行定位,将定位器创建为css = #id。否则,遵循的格式是css =[attribute=value]。使用CSS来创建“名字(First Name)”文本框的定位器。

driver.find_element(By.CSS_SELECTOR, "#fname")
id

通过使用网页上元素的ID属性来定位它。通常情况下,元素的ID属性在网页上应该是唯一的。使用 id 来识别“姓氏(Last Name)”字段。

driver.find_element(By.ID, "lname")
name

通过使用网页上元素的NAME属性来定位。通常情况下,元素的NAME属性在网页上应该是唯一的。通过使用 name 来识别“新闻简讯(Newsletter)”复选框。

driver.find_element(By.NAME, "newsletter")

如果想要定位的元素是一个链接,可以使用链接文本定位器来在网页上识别它。链接文本是链接显示的文本内容。通过使用 link test 来定位 Selenium Official Page 这个链接。

driver.find_element(By.LINK_TEXT, "Selenium Official Page")

如果想要定位的元素是一个链接,可以使用部分链接文本定位器来在网页上识别它。链接文本是链接显示的文本内容。可以传递部分文本作为值。通过使用 partial link test来定位 Selenium Official Page 这个链接。

driver.find_element(By.PARTIAL_LINK_TEXT, "Official Page")
tag name

可以使用HTML标签本身作为定位器,在页面上识别网页元素。通过使用 tag name, HTML标签“a”来识别链接。

driver.find_element(By.TAG_NAME, "a")
xpath

一个HTML文档可以被视为一个XML文档,可以通过使用XPath来定位感兴趣的元素,它是到达目标元素的路径。XPath可以是绝对XPath,它是从文档的根创建的。例如 - /html/form/input[1]。这将返回男性单选按钮。或者XPath可以是相对的。例如 - //input[@name='fname']。这将返回名字文本框。让我们使用XPath来创建定位器,以定位女性单选按钮。

driver.find_element(By.XPATH, "//input[@value='f']")

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

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

相关文章

外贸企业邮箱推荐:高抵达率的邮件解决方案

外贸邮箱用哪个企业邮箱邮件抵达率高&#xff1f; 在邮件到达率方面&#xff0c;Zoho Mail企业邮箱具有以下优势&#xff1a; 高效率的反垃圾邮件功能&#xff1a;Zoho Mail配备了前沿的反垃圾邮件过滤技术&#xff0c;能准确识别和拦截垃圾邮件&#xff0c;保证重要邮件能按时…

恢复图片?这4个方法别错过!

“我保存在电脑里的很多照片不知道是被误删了还是其他什么原因&#xff0c;莫名其妙就消失了。我应该通过什么方法找回这些丢失的图片呢&#xff1f;请大家帮帮我吧&#xff01;” 在这个信息时代&#xff0c;图片已经成为我们记录生活、分享经验、沟通交流的重要工具。有时候&…

解决使用pnpm安装时Sharp模块报错的方法

在使用pnpm进行项目依赖安装的过程中&#xff0c;有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块&#xff0c;但它的安装可能会因为各种原因而失败&#xff0c;导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…

【算法题】连续字母长度(js)

我自己的解法: 难点就在于如何使其计算重复的值&#xff0c;以及最后一次结果别忘记添加进对象里。 function solution(str, index) {const arr str.split("");let currentChar arr[0];let time 1;const obj {};for (let i 1; i < arr.length; i) {if (arr[i…

国内大厂机器人赛道产品

大疆 大疆无人机自然不必说&#xff0c;除此之外大疆搞机甲大师&#xff0c;教育机器人。 字节 当前字节在机器人领域只是初步探索阶段&#xff0c;目前尚未发布相关产品&#xff08;截止至23.12&#xff09;。 管理层想法&#xff1a; 跟已有业务做结合&#xff0c;服务好…

附录:已实现的多品种回测收益

声明&#xff1a; 本人不进行任何投资建议&#xff0c;也不出售任何包括策略、算法的程序代码。 仅作为个人的2023年开发心路总结&#xff0c;有任何异议可以在评论区留言&#xff0c;可以讨论&#xff0c;如果你杠&#xff0c;那就是你对。 这世上有很多条路&#xff0c;每个…

5键键盘的输出 - 华为OD统一考试

OD统一考试 题解&#xff1a; Java / Python / C 题目描述 有一个特殊的 5键键盘&#xff0c;上面有 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键。 a 键在屏幕上输出一个字母 a; ctrl-c 将当前选择的字母复制到剪贴板; ctrl-x 将当前选择的 字母复制到剪贴板&#xff0c;并清空选择…

科研试剂2913223-17-1激酶抑制剂 KWCN-41

KWCN-41 激酶抑制剂 2913223-17-1&#xff08;源自星戈瑞&#xff09; EFdA-TP 核苷逆转录酶抑制剂 950913-56-1 (RT) 3-O-Methylviridicatin TNF-α的抑制剂 6152-57-4 Zidebactam sodium salt β-内酰胺酶抑制剂 1706777-46-9 Triacsin C 酰基辅酶A合成酶抑制剂 76896-80…

JVM虚拟机:命令行查看JVM垃圾回收器的执行信息

在eclipse中打开命令行窗口 window->show view->Terminal 这样就打开了Terminal窗口&#xff0c;效果如下所示&#xff1a; java -XX:PrintCommandLineFlags -version 这个命令可以查看一些配置信息&#xff0c;其中最重要的配置信息就是&#xff0c;当前使用的G1回收器…

操作系统笔记——储存系统、文件系统(王道408)

文章目录 前言储存系统地址转换内存扩展覆盖交换 储存器分配——连续分配固定大小分区动态分区分配动态分区分配算法 储存器分配——非连续分配页式管理基本思想地址变换硬件快表&#xff08;TLB&#xff09;多级页表 段式管理段页式管理 虚拟储存器——基于交换的内存扩充技术…

期待已久:K8S终于迎来交换内存Beta支持!

关注【云原生百宝箱】公众号&#xff0c;获取更多云原生消息 Kubernetes 1.22 版本开始支持在 Linux 节点上使用交换内存的 Alpha 特性&#xff0c;而在 1.28 版本中升级为 Beta 版本并进行了许多改进。之前版本的 Kubernetes 不支持 Linux 系统上的交换内存&#xff0c;但随着…

中伟视界:AI算法+巡检机器人——闸刀开关状态实时精准识别技术助力智慧电网建设

随着智慧电网建设的不断深入&#xff0c;电力设备的安全和稳定运行变得尤为重要。而闸刀开关作为电网系统中的重要组成部分&#xff0c;其状态的实时监测和识别对于确保电力系统的正常运行至关重要。为了解决传统人工巡检效率低、准确性差等问题&#xff0c;近年来&#xff0c;…

PHP基础 - 数组遍历与排序

介绍 在PHP中,数组遍历和排序是常见的操作,用于对数组中的元素进行访问和排序 数组遍历 1)数值数组的遍历 使用 foreach 循环遍历数组:foreach 循环是最常用的遍历数组的方法,它可以遍历索引数组和关联数组。例如:$fruits = array("apple", "banana&q…

Mysql dumpling 导入导出sql文件

一&#xff1a;导出命令 mysqldump -u root -p saishi > saishi.sql mysqldump -u root -p saishi > saishi.sql root是用户名 saishi是数据库名 saishi.sql导出文件名 二&#xff1a;选择导入的数据库 cd到安装mysql的文件下&#xff08;找不到可以用&#xff1a;wh…

将数组的行列结构调整为m行、n列ndarray.reshape(m,n)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将数组的行列结构 调整为m行、n列 ndarray.reshape(m,n) 选择题 以下代码的输出结果为&#xff1f; import numpy as np arr np.array([[1,2,3],[4,5,6]]) print("【显示】arr\n"…

XML映射文件(第二种方式执行SQL语句)

第一种方式是注解的方式在下面&#xff1a; 注解操作SQL语句https://blog.csdn.net/m0_71149935/article/details/134908856?spm1001.2014.3001.5501 要想使用XML&#xff0c;需要遵守三项规范&#xff1a; XML映射文件的名称与Mapper接口名称一致&#xff0c;并且将XML映射…

深入学习Redis:从入门到实战

Redis快速入门 1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端1.4.1.R…

win11系统修改电脑ip方法

之前win10系统可以很简单的修改电脑ip&#xff0c;更新win11后老是报这个错误 子掩码无法修改填写 接下来三张图片教你修改电脑ip

前端开发转行做渗透测试容易吗?通过挖漏洞来赚钱靠谱吗?

最近&#xff0c;一个做运维的朋友在学渗透测试。他说&#xff0c;他公司请别人做渗透测试的费用是 2w/人天&#xff0c;一共2周。2周 10w 的收入&#xff0c;好香~ CSDN大礼包&#xff1a;《黑客&网络安全入门&进阶学习资源包》免费分享 于是&#xff0c;我也对渗透测…

2023鸿蒙开发环境初体现验

开发环境 系统&#xff1a;mac os 13.2.1 (22D68) / Ventura IDE: DevEco Studio 3.1.1 Release 下载地址 注&#xff1a;安装好整个基础的开发环境&#xff0c;我的电脑磁盘空间又少了十几G&#xff01;&#xff01;&#xff01; 环境配置 下载IDE&#xff0c;安装启动后&a…