Selenium自动化测试实战:手把手教你玩转网页测试!

最近在给公司做电商系统升级时,我深刻体会到自动化测试的重要性!每次手动点点点测试购物车功能,不仅效率低到想哭(关键手真的会抽筋啊喂),还容易漏测关键路径。今天咱们就来聊聊如何用Selenium这个神器,让测试效率原地起飞!

🚀 环境搭建的三大坑(血泪教训!)

刚开始用Selenium的朋友,90%都会栽在环境配置上!别问我怎么知道的(说多了都是泪)…

1. 安装库的正确姿势

# Python用户看这里
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

# Java选手别慌
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.10.0</version>
</dependency>

注意版本号要写死!我上次用latest差点搞崩整个项目(版本冲突太可怕了)!

2. 浏览器驱动的玄学问题

下载ChromeDriver时一定要看准版本号!这里教大家个绝招:

  1. 浏览器地址栏输入chrome://version/
  2. 记下显示的版本号前三位(比如115.0.5790.110)
  3. ChromeDriver官网找对应版本

(超级重要)驱动文件记得放在这三处之一:

  • 系统PATH包含的目录
  • Python的Scripts目录
  • 项目根目录下新建drivers文件夹

3. 验证安装是否成功

来段5行代码快速验证:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
print(driver.title)  # 应该输出"百度一下"

如果报WebDriverException,八成是驱动路径没配对!

🔥 实战:电商登录测试全流程

咱们以某电商平台登录功能为例,手把手写测试脚本。准备好瓜子饮料,发车啦!

元素定位的十八般武艺

# 传统ID定位(最稳!)
username = driver.find_element(By.ID, "username")

# XPath定位大法(复杂结构救星)
search_box = driver.find_element(By.XPATH, '//input[@class="search-input"]')

# CSS选择器新玩法
add_cart_btn = driver.find_element(By.CSS_SELECTOR, ".product-list > li:first-child button")

实测发现:优先用ID > CSS > XPath。上次用XPath定位动态元素,差点被绕晕在/div[3]/div[2]/span这种路径里…

登录测试完整案例

def test_login():
    driver = webdriver.Chrome()
    try:
        driver.get("https://mall.example.com/login")
        
        # 显式等待策略(比隐式等待靠谱多了!)
        wait = WebDriverWait(driver, 10)
        username = wait.until(EC.presence_of_element_located((By.ID, "username")))
        
        username.send_keys("test_user")
        driver.find_element(By.ID, "password").send_keys("P@ssw0rd!")
        driver.find_element(By.CLASS_NAME, "login-btn").click()
        
        # 验证登录成功
        welcome_text = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(text(),'欢迎回来')]")))
        assert "test_user" in welcome_text.text
    finally:
        driver.quit()

遇到过最坑的情况:登录弹窗突然变成新窗口,差点没定位到元素!后来加了窗口切换代码才解决。

💡 高级技巧:让脚本更健壮

1. 智能等待策略

三种等待方式对比:

类型优点缺点
强制等待简单粗暴影响执行效率
隐式等待全局设置不灵活,容易意外等待
显式等待精准控制代码稍复杂

推荐组合拳:

driver.implicitly_wait(5)  # 兜底等待
wait = WebDriverWait(driver, 10, poll_frequency=0.5)

2. 异常处理黑科技

from selenium.common.exceptions import NoSuchElementException

def safe_click(element):
    try:
        element.click()
    except ElementClickInterceptedException:
        driver.execute_script("arguments[0].scrollIntoView();", element)
        element.click()

上次遇到浮动广告遮挡按钮,就是这个方法救了我!

3. Page Object模式(PO模式)

把页面元素和操作封装成类:

class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.username = (By.ID, "username")
        self.password = (By.ID, "password")
    
    def login(self, user, pwd):
        self.driver.find_element(*self.username).send_keys(user)
        self.driver.find_element(*self.password).send_keys(pwd)
        self.driver.find_element(By.CLASS_NAME, "login-btn").click()

用PO模式后,维护脚本效率提升了300%!再也不用满世界找元素定位了。

🚨 常见问题急救包

Q1:元素明明存在却找不到?

  • 检查iframe嵌套
  • 确认元素在当前视窗(用scrollIntoView()
  • 查看是否有Shadow DOM(需要用JavaScript穿透)

Q2:如何处理随机弹窗?

try:
    alert = driver.switch_to.alert
    alert.dismiss()
except NoAlertPresentException:
    pass

Q3:下拉框选择技巧

from selenium.webdriver.support.select import Select

select = Select(driver.find_element(By.ID, "city"))
select.select_by_visible_text("北京")
select.select_by_value("bj")

🌟 升级路线图

  1. 整合Pytest做测试管理
  2. 使用Allure生成炫酷报告
  3. 搭建Selenium Grid分布式测试
  4. 结合Appium做移动端测试
  5. 接入CI/CD流水线

最近在尝试用Selenium录制操作生成测试脚本,发现有些工具生成的代码冗余太多,还是手写的更灵活。不过对新手来说,录制功能确实是个不错的入门方式。

最后说两句

自动化测试不是银弹!千万别为了自动化而自动化——我见过最离谱的案例,有人用Selenium测计算器功能(直接调接口不香吗?)。建议从核心业务流程开始,逐步扩大覆盖范围。

记住:好的测试脚本应该像乐高积木,可以灵活组合复用。刚开始可能觉得写脚本费时间,但当你第10次执行回归测试时,就会感谢当初的自己!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值