Selenium 邮件测试
Selenium 负责驱动浏览器;到了发邮件那一步,你需要一个测试能读的可寻址收件箱。这篇 Selenium 邮件测试指南用的是 Python 和一个一次性收件箱 API——另见 Playwright 和 Cypress 两个版本,它们都属于开发者邮件测试。
收件箱小助手
import os, time, requests
from selenium import webdriver
from selenium.webdriver.common.by import By
API = "https://moemail.app/api"
H = {"X-API-Key": os.environ["MAIL_KEY"]}
def create_inbox():
return requests.post(API + "/emails/generate", headers=H).json()
def wait_for_email(inbox_id, timeout=30):
end = time.time() + timeout
while time.time() < end:
msgs = requests.get(API + "/emails/" + inbox_id + "/messages", headers=H).json()["messages"]
if msgs:
return msgs[0]
time.sleep(1.5)
raise TimeoutError("no email arrived")
测试本体
import re
def test_signup_verification():
inbox = create_inbox()
driver = webdriver.Chrome()
driver.get("https://example.test/signup")
driver.find_element(By.ID, "email").send_keys(inbox["address"])
driver.find_element(By.CSS_SELECTOR, "button[type=submit]").click()
msg = wait_for_email(inbox["id"])
code = re.search("[0-9]{6}", msg["text"]).group(0)
driver.find_element(By.ID, "code").send_keys(code)
assert "Welcome" in driver.page_source
driver.quit()
页面元素用显式等待,邮件则用轮询小助手。正则 [0-9]{6} 抓的是六位验证码;如果要链接,就改成搜索 URL,再调 driver.get()。
小贴士
每个用例一个收件箱,能让各次运行彼此隔离;论速度,Webhook 胜过轮询。创建一个邮箱,再看看 OpenAPI 文档。