软测入门(八)Selenium项目实战

这篇具有很好参考价值的文章主要介绍了软测入门(八)Selenium项目实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自动化项目实战

项目计划设计

  • 测试计划
  • 测试范围
  • 设定目标
  • 规划活动

实际项目中,需要根据项目的实际情况创建自己的项目计划,没有固定的格式和内容要求:

项目简介 自动化实现网上购票
项目启动前置条件 1.购票网站工作正常 2.自动化测试环境准备完毕(Python Selenium3.0 谷歌驱动下载完毕)
覆盖场景 场景的确定需要根据性能需求分析得出,需要多方人员参与,开发、测试、产品等
1.火车票查询页面
2.车次列表页面
3.账号登录界面
4.订单信息页面

测试用例设计

软测入门(八)Selenium项目实战

仅作参考,实际项目按照要求设计即可。

自动化测试脚本

例如:要进行买票四次,那么准备一个数据文件
软测入门(八)Selenium项目实战

脚本开发及代码优化

可分三层:

  • 测试代码层 测试
  • 业务代码层 业务
  • 基础代码层 准备环境

基础层base_function.py,需要从excel中读取数据,然后测试多次。

# @creator by wlh
# @date 2023/3/7 9:51
from datetime import date, timedelta
from selenium import webdriver
from selenium.webdriver.common.by import By
import xlrd

# 计算日期 n=1时,表示是 明天
def date_n(n):
    return str(date.today() + timedelta(days=int(n)))

# 获取浏览器驱动(后面多次测试,只用这一个driver)
driver = webdriver.Chrome()

# 根据 name查询
def name(element_name):
    return driver.find_element(By.NAME, element_name)

# 根据xpath查询
def xpath(xpath):
    return driver.find_element(By.XPATH, xpath)

# 打开网址
def open_url(url):
    driver.get(url)
    driver.maximize_window()

# 获取driver,每次只返回同一个driver,如果是不同的driver,那么会打开多个浏览器  注意!!!
def get_driver():
    return driver

# 读取excel数据
def read_excel(filename, hasHead = False):
    # 打开工作簿
    xlsx = xlrd.open_workbook(filename)
    # 获取第一个sheet页对象
    sheet = xlsx.sheet_by_index(0)
    data = []
    for i in range(sheet.nrows):
        # 对标题的处理,是否添加到 列表 中
        if i == 0 and not hasHead:
            continue
        data.append(sheet.row_values(i))
    print(data)
    return data

业务层代码quna_book.py,当需要多次执行业务层代码时,浏览器驱动不需要使用 close()或quit(),否则的话只能执行一次流程!!!

# @creator by wlh
# @date 2023/3/7 9:52
import time

from selenium.webdriver import ActionChains, Keys
from base_function import *


def book_ticket(start, end, n, cartName, cartNo):
    driver = get_driver()
    open_url("https://train.qunar.com/")
	# 避免元素未加载出来
    time.sleep(1)
    action = ActionChains(driver)
    # 多次测试时,需要先清除上一次的内容
    name("fromStation").clear()
    name("fromStation").send_keys(start)
    time.sleep(0.5)
    # 移动位置 点击一下
    action.move_by_offset(0, 0)
    action.click()
    action.perform()

    # 多次测试时,需要先清除上一次的内容
    name("toStation").clear()
    name("toStation").send_keys(end)
    time.sleep(0.5)
    # 移动位置 点击一下
    action.move_by_offset(0, 0)
    action.click()
    action.perform()

    # 日期先清除之前的数据,然后再填写
    name("date").send_keys(Keys.CONTROL, "a", Keys.BACKSPACE)

    # 计算日期
    dateCome = date_n(n)

    name("date").send_keys(dateCome)
    # 移动位置 点击一下
    action.move_by_offset(0, 0)
    action.click()
    action.perform()

    # 点查询 车次
    name("stsSearch").click()
    # 等待页面一些元素的加载
    time.sleep(1)

    # 选择第一个车次,购买即可
    xpath("//*[@id='list_listInfo']/ul[2]/li[1]/div/div[7]/a[1]").click()
    # 等待页面一些元素的加载
    time.sleep(1)

    name("pName_0").send_keys(cartName)
    name("pCertNo_0").send_keys(cartNo)

    time.sleep(2)

测试层代码test_book.py

# @creator by wlh
# @date 2023/3/7 9:52
from quna_book import book_ticket
from base_function import read_excel
import pytest

# 读取 excel
data = read_excel("../data.xlsx")

# 采用 pytest的参数化,执行多次测试流程
@pytest.mark.parametrize(["start", "end", "n", "name", "no"], data)
def test_boo_ticket(start, end, n, name, no):
    book_ticket(start, end, n, name, no)

# pytest测试
if __name__ == '__main__':
    pytest.main(["-s", "test_book.py"])

PO模式处理!!

PO模式: Page Object,把页面当成对象;把页面中的业务放到其他

优点:

  • 页面分层 页面元素 和业务逻辑进行区分
  • 方便复用对象
  • 每个页面都是一个独立的测试用例
  • 自动化变得更加容易

base层: ----> 基础内容

common层: ----> 读取文件、日期处理、公共的

data层: ----> 数据的文件

logs层: ------> 日志

PO层: --------> 页面的业务代码

testcase: ------> 测试层的代码

reports: ------> 存放测试报告

config: --------> 配置文件

目录结构

软测入门(八)Selenium项目实战

base层代码base.py

通常情况下代码无提示,那么可以使用 # type: 类的方式告知解释器变量的类型,且代码会有提示

# @creator by wlh
# @date 2023/3/7 11:12
from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.by import By

class Base:
    def __init__(self, driver):
        self.driver = driver  # type: WebDriver

    # 根据 name查询
    def name(self, element_name):
        return self.driver.find_element(By.NAME, element_name)

    # 根据xpath查询
    def xpath(self, xpath):
        return self.driver.find_element(By.XPATH, xpath)

    # 打开网址
    def open_url(self, url):
        self.driver.get(url)
        self.driver.maximize_window()

    # 关闭窗口
    def close(self):
        self.driver.close()

common层代码function.py

# @creator by wlh
# @date 2023/3/7 11:10

from datetime import date, timedelta
import xlrd
# 读取excel数据
def read_excel(filename, hasHead=False):
    xlsx = xlrd.open_workbook(filename)
    sheet = xlsx.sheet_by_index(0)
    data = []
    for i in range(sheet.nrows):
        if i == 0 and not hasHead:
            continue
        data.append(sheet.row_values(i))
    return data


# 计算日期 n=1时,表示是 明天
def date_n(n):
    return str(date.today() + timedelta(days=int(n)))

data层就放一个excel文件即可。

po层,可以根据页面的数量,创建多个po文件,如此项目共跳转3个页面,那么整3个文件封装下即可。

book_ticket_page.py买票查询页面

# @creator by wlh
# @date 2023/3/7 11:18
import time
from selenium.webdriver import ActionChains, Keys
from ..base.base import Base

# 购票 PO
class BookTicket(Base):

    # 起始地
    def book_start(self):
        return self.name("fromStation")
	# 目的地
    def book_end(self):
        return self.name("toStation")
	# 查询按钮
    def book_button(self):
        return self.name("stsSearch")
	# 移动点击 (防止元素被遮盖)
    def move_click(self):
        action = ActionChains(self.driver)
        action.move_by_offset(0, 0)
        action.click()
        action.perform()
	# 出发日期
    def book_date(self, date):
        self.name("date").send_keys(Keys.CONTROL, "a", Keys.BACKSPACE)
        self.name("date").send_keys(date)

    # 查询具体动作
    def book_ticket(self, start, end, date):
        self.book_start().clear()
        self.book_start().send_keys(start)
        time.sleep(0.5)
        # 移动位置 点击一下
        self.move_click()

        self.book_end().clear()
        self.book_end().send_keys(end)
        time.sleep(0.5)
        # 移动位置 点击一下
        self.move_click()

        # 日期先清除之前的数据,然后再填写
        self.book_date(date)
        # 移动位置 点击一下
        self.move_click()

        # 点查询 车次
        self.book_button().click()
        time.sleep(1.5)

book_list_page.py车次列表页面

# @creator by wlh
# @date 2023/3/7 11:33
import time
from selenium_test.qunapo.base.base import Base

class BookList(Base):
    # 购买按钮
    def book_buy(self):
        return self.xpath("//*[@id='list_listInfo']/ul[2]/li[1]/div/div[7]/a[1]")
	# 具体购买流程
    def book_list(self):
        self.book_buy().click()
        time.sleep(2)

book_order_page.py订票详情页文章来源地址https://www.toymoban.com/news/detail-473962.html

# @creator by wlh
# @date 2023/3/7 11:35
import time
from selenium_test.qunapo.base.base import Base

class BookOrder(Base):
	# 订票人
    def book_name(self):
        return self.name("pName_0")
	# 身份证号
    def book_no(self):
        return self.name("pCertNo_0")
	# 输入信息
    def book_order(self, cartName, cartNo):
        self.book_name().send_keys(cartName)
        self.book_no().send_keys(cartNo)
        time.sleep(1)

testcase测试层

# @creator by wlh
# @date 2023/3/7 11:38
import time
import pytest
from selenium import webdriver
from selenium_test.qunapo.po.book_ticket_page import BookTicket
from selenium_test.qunapo.po.book_list_page import BookList
from selenium_test.qunapo.po.book_order_page import BookOrder
from selenium_test.qunapo.common.function import read_excel, date_n
# 读取数据
data = read_excel("../data/data.xlsx")

class Test_Book:
	# 前置夹具
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.get("https://train.qunar.com/")
        self.driver.maximize_window()
        time.sleep(1)
	# 类后置夹具
    def teardown(self):
        self.driver.quit()
	# pytest参数化执行测试流程
    @pytest.mark.parametrize(["start", "end", "n", "name", "no"], data)
    def test_01(self, start, end, n, name, no):
        ticket = BookTicket(self.driver)
        # 查询票
        ticket.book_ticket(start, end, date_n(n))
        list = BookList(self.driver)
        # 车次列表页
        list.book_list()
        order = BookOrder(self.driver)
        # 输入乘客信息
        order.book_order(name, no)

if __name__ == '__main__':
    pytest.main(["-s", "test_book.py"])

到了这里,关于软测入门(八)Selenium项目实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python自动化测试】详解selenium从入门到实战【一】

    目录 简介 selenium安装 安装浏览器驱动 确定浏览器版本 下载驱动 定位页面元素 打开指定页面 id 定位 name 定位 class 定位 tag 定位 xpath 定位 css 定位 link 定位 partial_link 定位 浏览器控制 修改浏览器窗口大小 浏览器前进后退 浏览器刷新 浏览器窗口切换 常见操作 鼠标控制 单击

    2024年02月05日
    浏览(39)
  • 软测入门(八)Selenium项目实战

    测试计划 测试范围 设定目标 规划活动 实际项目中,需要根据项目的实际情况创建自己的项目计划,没有固定的格式和内容要求: 项目简介 自动化实现网上购票 项目启动前置条件 1.购票网站工作正常 2.自动化测试环境准备完毕(Python Selenium3.0 谷歌驱动下载完毕) 覆盖场景 场

    2024年02月08日
    浏览(30)
  • 【python+selenium自动化测试实战项目】全面、完整、详细

    项目名称:**公司电子零售会员系统 项目目的:实现电子零售会员系统项目自动化测试执行 项目版本:v1.0 项目目录 项目环境 本版 python 36 pip insatll selenium PyCharm 2017.2.4 Windows 10 10.0 HTMLTestRunner.py 项目框架 unittest单元测试框架 pageobject 设计模式 UI对象库思想 项目设计 1.一个模

    2024年02月06日
    浏览(38)
  • Python+selenium自动化测试实战项目(全面,完整,详细)

    前言 之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过清明一直没有更新,今天整理一下实战项目的代码共大家学习。(注:项目是针对我们公司内部系统的测试,只能内部网络访问,外部网络无法访问) 问: 1.外部网络无法访问,代码也无法运行

    2024年02月13日
    浏览(33)
  • 三天精通Selenium Web 自动化 - 项目实战环境准备

     返回 TestNG,即Testing Next Generation,下一代测试技术,是一套根据JUnit和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集成测试。更多细节可以到官网去了解:TestNG - Welcome 1.1 安装TestNG 打开eclipse,菜单help - Install New Softwa

    2024年02月04日
    浏览(34)
  • Python + selenium实战:自动化登录功能测试用例,入门级!

    测试行业真是越来越卷了,点点点几乎没有竞争力,入行几乎都需要掌握一些自动化技术,本文就小编最近学习的 python + selenium 进行一个简单的登录功能实现 适用对selenium python unittest有一些了解的同学,大佬轻喷~ python selenium time ddt openpyxl unittest HTMLTestRunner data/login.xlsx 将

    2024年01月18日
    浏览(51)
  • Python Selenium3 自动化测试实战:构建高效测试项目

    💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】 🤟 基于Web端打造的:👉轻量化工具创作平台 💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在当今软件开发领域,自动化测试成为确保软件质量和提高开发效率的关键步骤。本文将深入探讨如何使

    2024年02月05日
    浏览(30)
  • selenium+python web自动化测试框架项目实战实例教程

    自动化测试对程序的回归测试更方便。 由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行... 可以运行更加繁琐的测试 自动化测试的一个明显好处就是可以在很短的时间内运行更多的测试。学习自动化测试最终目的是应用到

    2024年02月06日
    浏览(44)
  • 【Python】WebUI自动化—Selenium的下载和安装、基本用法、项目实战(16)

    Selenium 是一个用于测试 Web 应用程序 的自动化测试工具,它直接运行在 浏览器 中,实现了对浏览器的自动化操作,它支持所有主流的浏览器,包括 IE,Firefox,Safari,Chrome 等。 -支持所有主流平台(如, Windows、Linux、IOS、Android、Edge、Opera 等) 实现了诸多 自动化功能 ,比如

    2024年02月08日
    浏览(31)
  • 【Web项目实战】从零开始学习Web自动化测试:用Python和Selenium实现网站登录功能

    B站首推!2023最详细自动化测试合集,小白皆可掌握,让测试变得简单、快捷、可靠 https://www.bilibili.com/video/BV1ua4y1V7Db 目录 1.环境搭建

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包