零基础入门Selenium自动化测试:自动登录edu邮箱

🌟 Selenium简单概述一下

Selenium 是一个开源的自动化测试工具,主要用于 Web 应用程序的功能测试。它能够模拟用户操作浏览器的行为(如点击按钮、填写表单、导航页面等),应用于前端开发、测试和运维领域。

特点

  1. 跨浏览器支持:兼容 Chrome、Firefox、Edge 等主流浏览器。
  2. 多语言支持:支持 Python、Java、JavaScript 等编程语言。
  3. 开源免费
  4. 强大的扩展性:结合测试框架(如 unittestpytest)和报告工具(如 Allure),可构建完整的自动化测试体系。

🛠️ 环境搭建

1. 安装 Python

Selenium 依赖 Python 环境。如果尚未安装,请访问 Python官网 下载并安装最新版本(推荐 Python 3.8+)。

2. 安装 Selenium 库

打开终端(或命令提示符),输入以下命令:

pip install selenium

3. 下载浏览器驱动

Selenium 需要通过 浏览器驱动 与浏览器交互。以下是常见浏览器的驱动下载地址:

  • Chrome 驱动:ChromeDriver
  • Firefox 驱动:GeckoDriver

⚠️ 注意:驱动版本需与浏览器版本匹配!例如,Chrome 123 需要 ChromeDriver 123.x。

将下载的驱动文件(如 chromedriver.exe)放入系统环境变量路径(如 C:\Windows/usr/local/bin),或直接放在脚本所在目录。


🧰 Selenium 几个核心功能

1. 启动浏览器与访问网页

from selenium import webdriver
from selenium.webdriver.chrome.service import Serviceservice = Service(executable_path='chromedriver.exe')
driver = webdriver.Chrome(service=service)driver.get("https://www.baidu.com")

2. 元素定位与操作

Selenium 提供多种元素定位方式:

定位方式示例代码
IDdriver.find_element(By.ID, "kw")
XPathdriver.find_element(By.XPATH, "//input[@id='kw']")
CSS 选择器driver.find_element(By.CSS_SELECTOR, "input#kw")
链接文本driver.find_element(By.LINK_TEXT, "新闻")

3. 常用操作方法

# 输入文本
element.send_keys("Hello Selenium")# 点击按钮
element.click()# 清除输入框内容
element.clear()# 获取文本内容
text = element.text

4. 显式等待与隐式等待

隐式等待(全局生效):

driver.implicitly_wait(10) 

显式等待(针对特定条件):

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.visibility_of_element_located((By.ID, "kw"))
)

5. 处理弹窗与文件上传

  • 弹窗处理

    driver.switch_to.alert.accept()  # 确认弹窗
    driver.switch_to.alert.dismiss()  # 取消弹窗
    
  • 文件上传

    driver.find_element(By.ID, "upload").send_keys("C:/path/to/file.txt")
    

🚀 测试框架与报告生成

关于 HtmlTestRunner 的具体用法请自行检索一下…

1. 使用 unittest 编写测试用例

import unittest
from selenium import webdriverclass TestBaiduSearch(unittest.TestCase):def setUp(self):self.driver = webdriver.Chrome()self.driver.get("https://www.baidu.com")def test_search(self):search_box = self.driver.find_element(By.ID, "kw")search_box.send_keys("Selenium")search_box.submit()self.assertIn("Selenium", self.driver.title)def tearDown(self):self.driver.quit()if __name__ == "__main__":unittest.main()

2. 生成 HTML 测试报告

使用 HTMLTestRunner 扩展生成可视化报告:

import unittest
import HtmlTestRunnerclass TestBaiduSearch(unittest.TestCase):# ...if __name__ == "__main__":unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='reports'))

运行后会在 reports 目录生成 HTML 报告,可查看测试结果详情。


🎯 实战项目:自动登录edu邮箱

用GPT加了注释,方便修改。

from selenium import webdriver  # 导入webdriver模块,用于浏览器自动化操作
from selenium.webdriver.common.by import By  # 导入By类,用于定位元素
from selenium.webdriver.support.ui import WebDriverWait  # 导入WebDriverWait类,用于等待页面加载
from selenium.webdriver.support import expected_conditions as EC  # 导入expected_conditions模块,用于设置等待条件# 创建一个新的Chrome浏览器实例
driver = webdriver.Chrome()try:# 访问登录页面driver.get("http://mail.stu.ynu.edu.cn/")# 定位用户名输入框并输入用户名username_input = driver.find_element(By.XPATH, "//input[@name='qquin']")username_input.send_keys("Name")  # 用户名# 定位密码输入框并输入密码password_input = driver.find_element(By.XPATH, "//input[@name='pp']")password_input.send_keys("Pwd")  # 密码# remember_me_checkbox = driver.find_element(By.ID, "ss")# remember_me_checkbox.click()# 勾选“5天内自动登录”复选框。# 经过测试,发现当鼠标停在复选框上时会有弹窗挡住登录按钮,# 因此使用js直接勾选remember_me_checkbox = driver.find_element(By.ID, "ss")driver.execute_script("arguments[0].checked = true;", remember_me_checkbox)# 定位登录按钮并点击login_button = driver.find_element(By.XPATH, "//input[@type='submit']")login_button.click()try:# 使用显式等待机制等待 div.topdata 元素出现(最长等待时间为5秒),# 该元素出现表示登录成功。topdata_element = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.topdata")))print("登录成功!")  # 登录成功后打印消息except Exception as e:# 如果在指定时间内未找到 div.topdata 元素,则捕获异常并打印错误信息print(f"登录失败: {e}")finally:# 不论登录是否成功,在最后都会关闭浏览器窗口driver.quit()

📚 学习资源

  1. Selenium 官方文档
  2. ChromeDriver 下载页面

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

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

相关文章

day36 python神经网络训练

目录 一、数据准备与预处理 二、数据集划分与归一化 三、构建神经网络模型 四、定义损失函数和优化器 五、训练模型 六、评估模型 在机器学习和深度学习的实践中,信贷风险评估是一个非常重要的应用场景。通过构建神经网络模型,我们可以对客户的信用…

如何确定是不是一个bug?

在软件测试过程中,我们经常会遇到一些异常现象,但并非所有异常都是Bug。如何准确判断一个问题是否属于Bug?本文将从Bug的定义、判定标准、常见误区和实战技巧四个方面展开,帮助测试工程师提高Bug判定的准确性。 1. Bug的定义:什么情况下算Bug? 一个Bug(缺陷)通常指软件…

Lombok与Jackson实现高效JSON序列化与反序列化

引言 在Java开发中,处理JSON数据是常见需求,而Jackson作为广泛使用的JSON库,能够高效地将Java对象与JSON互相转换。然而,传统的POJO(Plain Old Java Object)需要手动编写大量样板代码(如getter…

论文阅读:PURPLE: Making a Large Language Model a Better SQL Writer

论文地址:PURPLE: Making a Large Language Model a Better SQL Writer 摘要 大语言模型(LLM)技术在自然语言到 SQL(NL2SQL)翻译中扮演着越来越重要的角色。通过大量语料训练的 LLM 具有强大的自然语言理解能力和基本…

【图像大模型】ControlNet:深度条件控制的生成模型架构解析

ControlNet:深度条件控制的生成模型架构解析 一、核心原理与技术突破1.1 基础架构设计1.2 零卷积初始化1.3 多条件控制机制 二、系统架构与实现细节2.1 完整处理流程2.2 性能指标对比 三、实战部署指南3.1 环境配置3.2 基础推理代码3.3 高级控制参数 四、典型问题解…

【从0到1搞懂大模型】chatGPT 中的对齐优化(RLHF)讲解与实战(9)

GPT系列模型的演进 chatgpt系列模型演进的重要节点包含下面几个模型(当然,这两年模型发展太快了,4o这些推理模型我就先不写了) (Transformer) → GPT-1 → GPT-2 → GPT-3 → InstructGPT/ChatGPT(GPT-3.5) → GPT-4 下面介绍一…

2025年AEI SCI1区TOP,改进麻雀搜索算法MSSA+建筑三维重建,深度解析+性能实测

目录 1.摘要2.麻雀搜索算法SSA原理3.整体框架4.改进SSA算法5.结果展示6.参考文献7.代码获取8.读者交流 1.摘要 对现有建筑进行高质量的三维重建对于其维护、修复和管理至关重要。图像采集中的有效视角规划会显著影响基于摄影测量的三维重建质量。复杂的建筑结构常常导致传统视…

鸿蒙开发:如何实现列表吸顶

前言 本文基于Api13 列表吸顶功能,在实际的开发中有着很大的作用,比如可以让列表层级之间更加分明,减少一定程度上的视觉混乱,由于吸顶的标题会随着滚动固定在顶部,可以让用户无需反复滑动回顶部确认分组位置&#xff…

使用Zotero的RSS订阅功能快速了解感兴趣领域最新文章

文章目录 写在前面中文期刊的RSS订阅英文期刊的RSS订阅回到Zotero有啥用? 写在前面 作为一名研究生或者科研工作者,肯定需要经常检索自己研究领域的最新文献,相比于不定期的去各大数据库检索文献,借助RSS订阅功能则更加便捷。 R…

Windows安装Docker Desktop开启 Kubenetes制作并部署本地镜像

1、安装Docker Desktop docker desktop官方下载链接,下载后一路点下来安装就好了。 2、制作本地镜像 跟着docker步骤制作镜像,需要先配置docker 镜像源,因为网络问题 {"builder": {"gc": {"defaultKeepStorage&…

嵌入式学习笔记 - freeRTOS 列表,链表,节点跟任务之间关系

一 下图说明了 freeRTOS 就绪列表,链表,节点跟任务之间关系 一个任务对应一个节点,一个链表对应一个优先级,一个任务根据优先级可以插入任何一个链表中。 插入函数为,这也是freeRTOS的核心函数,对每个任务…

scikit-learn pytorch transformers 区别与联系

以下是 scikit-learn、PyTorch 和 Transformers 的区别与联系的表格形式展示: 特性/库scikit-learnPyTorchTransformers主要用途传统机器学习算法深度学习框架预训练语言模型与自然语言处理任务核心功能分类、回归、聚类、降维、模型选择等张量计算、自动微分、神经网络构建与…

【C/C++】从零开始掌握Kafka

文章目录 从零开始掌握Kafka一、Kafka 基础知识理解(理论)1. 核心组件与架构2. 重点概念解析 二、Kafka 面试重点知识梳理三、C 使用 Kafka 的实践(librdkafka)1. librdkafka 简介2. 安装 librdkafka 四、实战:高吞吐生…

Spyglass:目标文件(.spq)的结构

相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 预备知识 为了方便检查,Spyglass向用户提供Guideware作为检查参考;Guideware又包含各种方法(Methodology),应用于设计的不同阶段&…

一些Dify聊天系统组件流程图架构图

分享一些有助于深入理解Dify聊天模块的架构图 整体组件架构图 #mermaid-svg-0e2XalGLqrRbH1Jy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0e2XalGLqrRbH1Jy .error-icon{fill:#552222;}#mermaid-svg-0e2XalGLq…

地理空间索引:解锁日志分析中的位置智慧

title: 地理空间索引:解锁日志分析中的位置智慧 date: 2025/05/24 18:43:06 updated: 2025/05/24 18:43:06 author: cmdragon excerpt: 地理空间索引在日志分析中应用广泛,涉及用户登录IP定位、移动端位置轨迹和物联网设备位置上报等场景。MongoDB支持2dsphere和2d两种地理…

分库分表深度解析

一、为什么要分库分表? 通常,数据库性能受到如下几个限制: 硬件瓶颈:单机的 CPU、内存、磁盘 I/O 等资源总是有限。例如,当单表中的记录达到上亿、甚至更高时,表扫描、索引维护和数据迁移会变得非常慢。单…

QListWidget的函数,信号介绍

前言 Qt版本:6.8.0 该类用于列表模型/视图 QListWidgetItem函数介绍 作用 QListWidget是Qt框架中用于管理可交互列表项的核心组件,主要作用包括: 列表项管理 支持动态添加/删除项:addItem(), takeItem()批量操作:addItems()…

ModbusRTU转profibusDP网关与RAC400通讯报文解析

ModbusRTU转profibusDP网关与RAC400通讯报文解析 在工业自动化领域,ModbusRTU和ProfibusDP是两种常见的通信协议。ModbusRTU以其简单、可靠、易于实现等特点,广泛应用于各种工业设备之间的通信;而ProfibusDP则是一种高性能的现场总线标准&am…

Python容器

一、容器 1. 列表【】:有序可重复可混装可修改 [元素1,元素2,元素3,...] • 可以容纳多个元素 • 可以容纳不同类型的元素(混装) • 数据是有序存储的(有下标序号) • 允许重复数…