零基础入门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 库

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

bash 复制代码
pip install selenium

3. 下载浏览器驱动

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

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

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


🧰 Selenium 几个核心功能

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

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service(executable_path='chromedriver.exe')
driver = webdriver.Chrome(service=service)

driver.get("https://www.baidu.com")

2. 元素定位与操作

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

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

3. 常用操作方法

python 复制代码
# 输入文本
element.send_keys("Hello Selenium")

# 点击按钮
element.click()

# 清除输入框内容
element.clear()

# 获取文本内容
text = element.text

4. 显式等待与隐式等待

隐式等待(全局生效):

python 复制代码
driver.implicitly_wait(10) 

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

python 复制代码
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "kw"))
)

5. 处理弹窗与文件上传

  • 弹窗处理

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

    python 复制代码
    driver.find_element(By.ID, "upload").send_keys("C:/path/to/file.txt")

🚀 测试框架与报告生成

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

1. 使用 unittest 编写测试用例

python 复制代码
import unittest
from selenium import webdriver

class 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 扩展生成可视化报告:

python 复制代码
import unittest
import HtmlTestRunner

class TestBaiduSearch(unittest.TestCase):
    # ...

if __name__ == "__main__":
    unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='reports'))

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


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

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

python 复制代码
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 下载页面
相关推荐
西瓜程序猿7 小时前
使用手机如何将纸质礼薄转换为电子礼薄?
测试工具·智能手机·创业创新·记了么·电子礼薄·份子钱
半个俗人12 小时前
fiddler的基础使用
前端·测试工具·fiddler
站长工具箱13 小时前
基于浏览器的键盘按键测试工具功能解析
测试工具·计算机外设
小陈的进阶之路1 天前
Selenium 滑动 vs Appium 滑动
python·selenium·测试工具·appium
程序员小远1 天前
软件测试用例总结
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
爱丽_1 天前
软件测试基础分类与核心概念整理
功能测试·测试工具·测试用例
测试人社区—83521 天前
‌TCP/IP协议栈参数调优验证:软件测试从业者指南
网络·人工智能·网络协议·tcp/ip·测试工具·语音识别·压力测试
趙卋傑1 天前
测试开发场景下常见的 MCP 服务
开发语言·python·测试工具·ai编程
oi..2 天前
CSRF安全攻防:Referer 校验与 Token 防护详解
前端·网络·笔记·测试工具·安全·网络安全·csrf
HoneyMoose2 天前
Postman 测试 API 如何上传文件
测试工具·postman