selenium 自动化项目实战——添加购物车

本文介绍了一个使用Selenium进行的小米商城自动化测试案例,包括登录、搜索商品、加入购物车等流程,并通过模块化的方式组织代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常规代码

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 访问小米网页
driver.get("https://www.mi.com")
time.sleep(2)
# 点击登录按钮
# driver.find_element_by_css_selector('#J_siteUserInfo>a:nth-child(1)').click()
driver.find_element_by_xpath('//a[text()="登录"]').click()
time.sleep(2)
# 处理用户协议,点击同意。一般用户协议只在第一次时出现,使用if处理
# btns = driver.find_element_by_class_name("btn-primary")
btns = driver.find_element_by_xpath('//button[text()="同意"]').click()
if btns:
    btns[0].click()
# 输入用户名密码
driver.find_element_by_id("username").send_keys("username")
driver.find_element_by_id("pwd").send_keys("*******")
# 点击登录
driver.find_element_by_id("login-button").click()
time.sleep(2)
# 搜索商品
driver.find_element_by_id("search").send_keys("小米10 Pro\n")
time.sleep(2)
# 选择第一个商品
driver.find_element_by_xpath('//div[@class="goods-list clearfix"]/div[1]/div/a').click()
time.sleep(5)
# 切换到新窗口——商品详情页面
for handle in driver.window_handles:
    driver.switch_to.window(handle)
    # 判断切换到目标窗口的标题是否为:小米10 Pro立即购买-小米商城
    if "小米10 Pro立即购买-小米商城" == driver.title:
        print("已经切换到新窗口")
        break
# 点击加入购物车
time.sleep(3)
driver.find_element_by_xpath('//a[text()="加入购物车"]').click()
# 检查是否成功登录
res = driver.find_element_by_css_selector(".goods-info>span").text
assert '小米10 Pro 全网通版' in res
print("加入购物车成功")
# 退出浏览器
driver.quit()

代码模块化

# 首页
class IndexPage():
    def __init__(self,driver):
        self.driver = driver
        # 访问小米网页,确保处于首页
        self.driver.get("https://www.mi.com")
        # time.sleep(2)
    def to_login(self):
        # 点击登录按钮
        self.driver.find_element_by_xpath('//a[text()="登录"]').click()
        # time.sleep(2)
        # 处理用户协议,点击同意。一般用户协议只在第一次时出现,使用if处理
        btns = self.driver.find_element_by_xpath('//button[text()="同意"]').click()
        if btns:
            btns[0].click()
        # 返回登录页对象
        return LoginPage(self.driver)
# 登录页
class LoginPage():
    def __init__(self,driver):
        self.driver = driver
    def login(self,username,psw):
        # 输入用户名密码
        self.driver.find_element_by_id("username").send_keys(username)
        self.driver.find_element_by_id("pwd").send_keys(psw)
        # 点击登录
        self.driver.find_element_by_id("login-button").click()
        # time.sleep(2)
        # 返回首页对象
        return IndexPage(self.driver)
    # 搜索商品
    def search_item(self):
        self.driver.find_element_by_id("search").send_keys("小米10 Pro\n")
        return GoodItemsPage(self.driver)
    # def search_item(self,item="小米10 Pro"):
    #     # 搜索商品
    #     self.driver.find_element_by_id("search").send_keys(item+'\n')
    #     # time.sleep(2)
    #     return GoodItemsPage(self.driver)

# 商品页面
class GoodItemsPage():
    def __init__(self,driver):
        self.driver = driver
    def pick_item(self):
        # 选择第一个商品
        self.driver.find_element_by_xpath('//div[@class="goods-list clearfix"]/div[1]/div/a').click()
        # time.sleep(5)
        # 切换到新窗口——商品详情页面
        for handle in driver.window_handles:
            driver.switch_to.window(handle)
            # 判断切换到目标窗口的标题是否为:小米10 Pro立即购买-小米商城
            if "小米10 Pro立即购买-小米商城" == driver.title:
                print("已经切换到新窗口")
                return ItemPage(self.driver)
# 商品详情页
class ItemPage():
    def __init__(self,driver):
        self.driver = driver
    def add_to_cart(self):
        # 点击加入购物车
        # time.sleep(3)
        self.driver.find_element_by_xpath('//a[text()="加入购物车"]').click()
        return ShopCartPage(self.driver)
# 购物车页面
class ShopCartPage():
    def __init__(self,driver):
        self.driver = driver
    def check_item(self):
        # 检查是否成功登录
        res = self.driver.find_element_by_css_selector(".goods-info>span").text
        assert '小米10 Pro 全网通版' in res
        print("加入购物车成功")
if __name__ == "__main__":
    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    # 使用类调用函数
    a = IndexPage(driver).to_login()
    a.login("username","******")
    a.search_item().pick_item().add_to_cart().check_item()


课程简介:课程介绍你是否在寻找机会进入自动化测试领域?你是否渴望学习selenium webdriver + Java以及**的框架和技术进行web自动化测试?你是否感兴趣学习Selenium如何用在你现有的项目里的?这门课带你从Selenium搭建环境开始讲起,然后学习常用方法,单元测试,PO设计模式, jenkins等。我们假设学员没有任何自动化经验,来设计的这套课程。每个课题都从最基础的开始讲起。Selenium相关的该覆盖的课题都覆盖了。全程手写代码,逐步迭代,方便学习。例子都是来自于真实的web应用项目,帮助你理解不同的组件怎么用上自动化,这将展示给你一个行业层面的框架,增加自信心。这门课涵盖到基础到高级项目实战。您将会学到什么学完课程以后,你将了解Selenium Webdriver知识你将具备设计数据驱动框架、Page Object、等搭建自动化框架的能力用众多实例对Selenium现实场景应用进行深入理解了解单元测试, Jenkins, HTML报告,并发测试 你从网上随便选择一个网站,都可以尝试实现自动化,用所有可能的测试用例进行自动化测试将提高你的编码技能,以编写最优化的自动化测试用例代码你基本可以应对任何Selenium面试,并能从设计阶段开始领导整个Selenium自动化项目你将能够创建漂亮的报告来打动客户或领导更深入地理解自动化指南和代码质量标准会附带一个练习网站,可以用上所有可用的WebDriver功能,实现自动化【适合人群】软件手动测试人员想转为自动化测试的人员自动化软件测试人员想加强专业技能的刚毕业学生想从事软件行业QA 组长或项目经理【课程优势】学完课程以后,你将拥有完整的Selenium Webdriver知识,完整的项目实战【讲师介绍】资质介绍:12年以上开发、自动测试方面经验,其中7年以上测试开发经验,现为技术架构师新书“Python3+Selenium3自动化测试项目实战”作者【课程咨询】作者联系QQ:2574674466 完善的学习文档            
<think>嗯,用户想准备自动化测试和AI方向的软件测试面试,需要整理相关知识。用户明确提到"自动化测试"和"AI测试"两个关键词,还提到面试准备,说明这是求职导向的学习需求。 从引用内容看,有几个关键点值得注意:引用[1]详细对比了手工测试和AI测试的差异,包括效率、成本、准确性等维度;引用[4]提供了自动化测试的流程规范和脚本编写规范;引用[5]强调了自动化测试稳定性的解决方案。这些都可以整合进知识框架。 用户可能处于职业转型期或技能提升阶段,需要结构化知识体系。考虑到面试场景,应该突出高频考点和差异化优势(如AI测试的新趋势)。需要避免单纯罗列概念,而要突出"为什么重要"和"如何应用"。 准备分三个层次组织回复:先建立自动化测试基础(流程/框架/脚本),再深入AI测试特性(与传统自动化的区别),最后补充面试实战技巧(包括行为问题和场景题)。特别要强调AI测试特有的内容,如智能定位、自愈脚本、预测分析等,这是用户区别于其他应聘者的关键。 注意到引用[3]提到公司招聘自动化测试时会考察"整体质量体系建设",因此在面试技巧部分要加入质量保障思维的考察点。稳定性问题(引用[5])和框架选择(引用[4])都是高频考点,需重点展开。</think>以下是针对自动化测试与AI测试方向的软件测试面试系统化准备指南,结合核心知识点、高频问题及实战技巧: --- ### **一、自动化测试核心知识** #### 1. **自动化测试流程与框架** - **流程**:需求分析 → 工具选型(如Selenium、Appium) → 框架搭建(数据驱动/关键字驱动) → 脚本开发 → 执行维护[^4] - **框架选择考量**: - 项目技术栈(Web/App/API) - 维护成本 vs. 复用性 - 是否支持持续集成(如Jenkins集成) - **稳定性优化**: - 智能等待(显式/隐式等待) - 用例解耦:每条用例从统一入口(如首页)开始执行[^5] #### 2. **脚本开发规范** - 命名统一性(用例名以`Test_`开头) - 异常处理机制(Try-Catch日志记录) - 数据与脚本分离(数据驱动)[^4] ```python # 示例:Pytest + Selenium基础脚本 import pytest from selenium.webdriver.common.by import By @pytest.fixture def setup(): driver = webdriver.Chrome() driver.get("https://example.com") yield driver driver.quit() def test_login(setup): driver = setup driver.find_element(By.ID, "username").send_keys("test_user") driver.find_element(By.ID, "password").send_keys("secure_pass") driver.find_element(By.XPATH, "//button[@type='submit']").click() assert driver.title == "Dashboard" ``` #### 3. **高频面试题** - **Q:如何选择自动化测试范围?** → *答:优先覆盖核心业务流程、高频回归场景(如登录/支付)、稳定模块[^4]。* - **Q:自动化测试成本高,为什么还要做?** → *答:长期节省回归时间,提高测试覆盖率,支持快速迭代(ROI在6个月以上显现)[^1]。* - **Q:遇到动态元素如何定位?** → *答:使用XPath轴(如`following-sibling::`)、CSS选择器层级定位,或AI工具智能定位(如Testim)[^5]。* --- ### **二、AI测试专项突破** #### 1. **AI测试 vs. 传统自动化** | **维度** | **传统自动化** | **AI测试** | |----------------|-----------------------------|--------------------------------| | 执行效率 | 线性执行,速度慢 | 并行测试,速度提升5-10倍[^1] | | 稳定性 | 依赖脚本维护,元素变动易失败 | 自愈能力(Self-healing)修复定位 | | 覆盖场景 | 有限边界用例 | 智能生成边缘用例(如模糊测试) | | 成本 | 人力维护成本高 | 初期投入高,长期ROI显著[^1] | #### 2. **AI测试工具与应用** - **智能测试生成**: - Tools:Applitools(视觉AI)、Testim(自愈脚本) - 应用:自动生成边界值测试、识别页面元素上下文关系 - **预测性分析**: - 基于历史缺陷数据预测高风险模块 - 动态调整测试优先级(如:代码变更影响分析) - **示例场景**: > *AI模型测试:验证推荐系统覆盖率——输入用户画像,检查推荐结果是否覆盖所有商品类目[^1]。* #### 3. **AI测试面试题** - **Q:AI如何提升测试覆盖率?** → *答:通过算法分析代码路径,自动生成未覆盖场景的测试数据;利用NLP解析需求文档补充用例[^1]。* - **Q:AI测试的局限性?** → *答:依赖训练数据质量;复杂业务逻辑理解不足;需人工审核生成用例的合理性。* - **Q:如何测试一个AI模型?** → *答:聚焦三方面——准确性(如混淆矩阵)、鲁棒性(对抗样本测试)、公平性(偏见检测)。* --- ### **三、面试实战技巧** 1. **行为问题**: - *“如何从0搭建自动化体系?”* → 参考流程:评估工具 → 试点模块 → 推广核心链路 → 集成CI/CD[^4]。 2. **场景题**: - *“购物车功能频繁改动,如何设计自动化?”* → 策略:封装购物车操作为独立类 → 使用Page Object模式 → 数据驱动覆盖参数组合。 3. **趋势洞察**: - 强调AI测试的落地价值: > *“AI测试不仅提升效率,更通过智能分析将测试左移,提前发现需求歧义”[^1]。* --- ### **四、学习资源推荐** - **工具实践**:Katalon(低代码自动化)、TensorFlow Model Analysis(AI模型验证) - **理论深化**:ISTQB AI测试认证大纲、论文《Machine Learning for Software Testing》 - **面试题库**:自动化测试脚本调试案例、AI测试伦理问题讨论[^3][^4] > 关键提示:面试中需突出 **“质量保障思维”**——自动化是手段,保障业务质量才是目标。结合AI测试时,强调 **数据驱动决策**(如用测试报告推动代码优化)[^2][^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值