Selenium:原理与使用指南

文章目录

    • 简介
    • Selenium 的原理
    • 安装 Selenium
    • 基本使用示例
      • 代码说明
    • 常用操作
      • 查找元素
      • 交互操作
      • 等待
      • 处理弹窗
    • 高级功能
      • 截屏
      • 执行 JavaScript
      • 切换窗口
    • 结论

简介

Selenium 是一个用于 Web 应用程序自动化测试的强大工具。它提供了一系列库和工具,支持多种浏览器和编程语言,使得 Web 测试自动化变得简单和高效。

Selenium 的核心组件包括:

  • Selenium WebDriver:用于控制浏览器行为的 API。
  • Selenium IDE:一种用于录制和回放测试的工具。
  • Selenium Grid:用于并行测试的分布式系统。

官网链接:Selenium Official Documentation

Selenium 的原理

Selenium 的工作原理是通过 WebDriver 与浏览器进行交互。WebDriver 是一套协议,定义了自动化测试工具如何与浏览器通信。WebDriver 将用户的操作(如点击、输入等)转换为浏览器可理解的命令,然后浏览器执行这些命令并返回结果。

WebDriver 支持的浏览器包括 Chrome、Firefox、Safari、Edge 等。每个浏览器都有对应的驱动程序,如 ChromeDriver、GeckoDriver 等。这些驱动程序负责将 WebDriver 的命令传递给浏览器并获取响应。

安装 Selenium

首先,需要安装 Selenium 库和相应的浏览器驱动程序。以下是安装步骤:

  1. 安装 Selenium 库

    pip install selenium
    
  2. 下载浏览器驱动程序(例如 ChromeDriver):

    • ChromeDriver 下载地址:ChromeDriver
    • 将下载的驱动程序添加到系统路径中,或者指定路径。

基本使用示例

以下是一个简单的示例,展示如何使用 Selenium WebDriver 控制 Chrome 浏览器打开一个网页,并执行一些基本操作。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys# 初始化 Chrome 浏览器
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')# 打开网页
driver.get("http://example.com")# 查找元素并进行操作
search_box = driver.find_element_by_name("q")
search_box.send_keys("Selenium")
search_box.send_keys(Keys.RETURN)# 验证结果
assert "No results found." not in driver.page_source# 关闭浏览器
driver.quit()

代码说明

  1. 初始化浏览器:使用 webdriver.Chrome() 初始化 Chrome 浏览器。如果 ChromeDriver 不在系统路径中,需要指定其路径。
  2. 打开网页:使用 get() 方法打开指定的 URL。
  3. 查找元素:使用 find_element_by_name() 方法查找页面上的元素,并执行输入操作。
  4. 验证结果:通过断言检查页面内容是否包含特定文本。
  5. 关闭浏览器:使用 quit() 方法关闭浏览器。

常用操作

查找元素

Selenium 提供了多种查找元素的方法:

  • find_element_by_id()
  • find_element_by_name()
  • find_element_by_xpath()
  • find_element_by_css_selector()
  • find_element_by_class_name()

交互操作

常见的交互操作包括点击、输入、选择下拉菜单等:

  • click():点击元素。
  • send_keys():向输入框发送文本。
  • clear():清空输入框。

等待

在自动化测试中,通常需要等待页面加载或元素出现。Selenium 提供了显式等待和隐式等待:

  • 显式等待
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as ECelement = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myElement"))
    )
    
  • 隐式等待
    driver.implicitly_wait(10)  # 等待 10 秒
    

处理弹窗

Selenium 可以处理浏览器弹窗:

  • 接受弹窗:
    alert = driver.switch_to.alert
    alert.accept()
    
  • 拒绝弹窗:
    alert = driver.switch_to.alert
    alert.dismiss()
    

高级功能

截屏

Selenium 可以截取当前页面的屏幕截图:

driver.save_screenshot('screenshot.png')

执行 JavaScript

可以使用 execute_script() 方法执行 JavaScript 代码:

driver.execute_script("alert('Hello, World!');")

切换窗口

Selenium 可以在多个窗口或标签页之间切换:

driver.switch_to.window(driver.window_handles[1])

结论

Selenium 是一个功能强大且灵活的 Web 自动化测试工具。通过学习和掌握 Selenium 的基本原理和使用方法,可以显著提高 Web 测试的效率和覆盖范围。无论是简单的页面交互测试,还是复杂的多浏览器兼容性测试,Selenium 都能提供有力的支持。

更多详细信息和高级用法,请参阅 Selenium 官方文档。

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

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

相关文章

提升TK直播体验:使用美国直播网络的六大优势

国内有许多公司想在TikTok上进行美国直播,但由于TikTok的政策限制,在国内直接访问存在困难。然而,通过使用Ogcloud的美国直播网络,这一问题得以解决。那么,TikTok海外直播使用美国直播网络具体有哪些优势呢&#xff1f…

【懒删除堆 优先队列】1172. 餐盘栈

本文涉及知识点 懒删除堆 优先队列 LeetCode1172. 餐盘栈 我们把无限数量 ∞ 的栈排成一行,按从左到右的次序从 0 开始编号。每个栈的的最大容量 capacity 都相同。 实现一个叫「餐盘」的类 DinnerPlates: DinnerPlates(int capacity) - 给出栈的最大…

封装方法实现表格合并

封装方法 const mergeTableRow (config:any)> {let data config.dataconst {mergeColNames, // 需要合并的列firstMergeColNames, // 受影响的列firstMerge // 以哪列为基础进行合并(基准列)} configif (!mergeColNames || mergeColNames.length 0) {return data}merge…

中位数贪心,3086. 拾起 K 个 1 需要的最少行动次数

一、题目 1、题目描述 给你一个下标从 0 开始的二进制数组 nums,其长度为 n ;另给你一个 正整数 k 以及一个 非负整数 maxChanges 。 Alice 在玩一个游戏,游戏的目标是让 Alice 使用 最少 数量的 行动 次数从 nums 中拾起 k 个 1 。游戏开始…

Java基础(基于韩顺平老师的笔记)

Java基础 Java特点环境搭建Java 基础语法数据类型流程控制 数组面向对象方法重载封装多态继承 类类变量(又叫静态变量)类方法(又叫静态方法) 接口枚举常用类String日期时间 集合类泛型注解异常处理多线程IO 流反射经典面试题&…

谷歌GMS认证之安卓Android Auto认证,车机的Android Auto认证介绍,GAS跟Android Auto区别

一、Android Auto认证前言 Android Auto 是谷歌(Google)推出的一个车载平台,它允许驾驶者将他们的Android设备(如智能手机)连接到车辆的显示屏上,以便在驾驶时更安全和方便地使用某些应用程序和服务。 为…

stm32中IIC通讯协议

参考资料:大部分均引用b站江协科技课程、GPT及网络资料 什么是IIC(i2C)通讯协议? 关键字:SCL、SDA、半双工、同步、串行。 IIC(Inter-Integrated Circuit),也称为I2C(In…

不同的llm推理框架

vLLM适用于大批量Prompt输入,并对推理速度要求比较高的场景。 实际应用场景中,TensorRT-LLM通常与Triton Inference Server结合起来使用,NVIDIA官方能够提供更适合NVIDIA GPU运行的高效Kernel。 LightLLM比较轻量、易于扩展、易于上手&…

【chatgpt】 PyTorch中dtype属性,表示张量的数据类型

在 PyTorch 中,dtype 是一个属性,用于表示张量的数据类型。dtype(数据类型)决定了张量中元素的存储方式和计算方法。 常见的数据类型 PyTorch 支持多种数据类型,常见的数据类型包括: torch.float32 或 t…

Linux—KVM虚拟化中使用基本命令管理虚拟机(纯实例)

🏡作者主页:点击! 👨‍💻Linux高级管理专栏:点击! ⏰️创作时间:2024年7月2日11点11分 🀄️文章质量:94分 文章目录 前言 1.查看命令帮助 2.查看KVM 的…

c/c++语言的一种日志的编写办法

今日分享一下,从某源码中看到这种日志编写方式,很强。可以借鉴。 这个函数调用的日志函数是不一样的,仔细观看: 这几种日志输出函数,背后都调用了相同的调用。 与之对应的区别就是,函数名称的差异取决于…

mpeg格式怎么转换成mp4?这四种转换方法非常好用!

mpeg格式怎么转换成mp4?在数字视频领域中,MPEG格式算是相对冷门的一种选择,然而,选择这种格式却不是没有代价的,首先,MPEG采用了有损压缩技术,这意味着在视频处理过程中,会丢失一些细…

单个企业年收入达24.7亿!银发游学市场按下“加速键”,兴趣教育平台抢滩布局

干货抢先看 1. 银发游学市场渐趋火热,美国最大的银发游学机构Road Scholar最新披露的财报显示,上个财年公司收入达3.395亿美元(约合人民币24.7亿)。 2. 在国内,一批专注银发兴趣教育的品牌纷纷入局,拓展游…

Redis的两种持久化方案

Redis 提供了多种持久化机制来保证数据在发生意外情况下(如断电或服务器崩溃)不丢失。以下是几种主要的 Redis 持久化方案及其特点: 1. RDB (Redis Database Backup) RDB 是 Redis 创建的数据库快照,它可以将数据集快照以二进制…

MYSQL8.0配置

1、下载安装包 2、解压软件包 将MySQL软件包解压在没有中文和空格的目录下 3、设置配置文件my.ini my.ini中加入以下内容 [client] #客户端设置,即客户端默认的连接参数 # 设置mysql客户端连接服务端时默认使用的端口 port3306#默认编码 default-character-set…

如何保证Kafka顺序消费

在分布式消息系统中,消息的顺序性是一个重要的问题。Apache Kafka 提供了多种机制来确保消息的顺序消费,但需要根据具体的使用场景进行配置和设计。以下是一些确保 Kafka 顺序消费的关键点和方法: 1. Kafka 消息的顺序保证原理 单分区内的消…

一个使用 g++ 模块化编译的 hello world 示例( Ubuntu 20.04 )

1. 确认 ubuntu 版本&#xff1a; 2. 文件夹结构&#xff1a; 3. 各个文件内容&#xff1a; 3.1. myadd.cpp&#xff1a; #include<iostream> using namespace std; int add_xxx( int a,int b ){int result a b;cout << a << " " << …

【C语言】return 关键字

在C语言中&#xff0c;return是一个关键字&#xff0c;用于从函数中返回值或者结束函数的执行。它是函数的重要组成部分&#xff0c;负责将函数的计算结果返回给调用者&#xff0c;并可以提前终止函数的执行。 主要用途和原理&#xff1a; 返回值给调用者&#xff1a; 当函数执…

Git 常用操作详解

Git 是一个功能强大且广泛使用的版本控制系统。掌握 Git 的基本操作是每个开发者必备的技能之一。本篇博客将介绍 Git 的一些常用操作&#xff0c;并通过一个完整的示例来引导你更好地理解这些操作。 1. Git 基本概念 在开始使用 Git 之前&#xff0c;我们需要了解一些基本概…

技术成神之路:设计模式(二)建造者模式

1.定义 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许你分步骤创建复杂对象&#xff0c;而不必直接调用构造函数。建造者模式特别适合那些包含多个组成部分并且构造过程复杂的对象。 2. 结构 建造者模式的主要组成部分包括&#…