IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Selenium自动化测试——计算器加法测试 -> 正文阅读

[开发测试]Selenium自动化测试——计算器加法测试

项目简介:对“在线计算器”的加法功能进行自动化测试

使用技术:PO框架+Unittest+Selenium

项目框架:

?以下针对代码结构及功能作相应分析:

1、base基类层

????????base_cal_test.py包含page页面一些公用的方法,比如说查找定位计算器元素,点击功能等;

? ? ? ? get_driver.py 获取driver对象

  • 注意解包loc只需要在查找元素的地方使用就可以?
  • 包含

    #初始化方法

    #查找元素方法

    #点击元素方法

    #获取value属性方法封装

    #截图方法

?源代码:base_cal_test.py

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time

class Base:
    #  初始化方法
    def __init__(self,driver):
        self.driver = driver

    #  查找元素
    def base_find_element(self,loc,timeout=30,poll=0.5):
        """
        @param loc: 元素的定位信息,元组格式
        @param timeout: 默认超时时间30秒
        @param poll: 访问频率,0.5秒一次
        @return: 返回查找到的元素
        """
        return  WebDriverWait(self.driver,
                              timeout=timeout,
                              poll_frequency=poll).until(lambda x:x.find_element(*loc))

    #  点击元素
    def base_click(self,loc):
        self.base_find_element(loc).click()

    #  获取元素的value值
    def base_get_ele_value(self,loc):
        #使用get_attribute("value")获取指定元素的属性值
        return self.base_find_element(loc).get_attribute("value")

    #  截图
    def base_get_image(self):
        self.driver.get_screenshot_as_file('../image/{}.png'.format(time.strftime("%Y_%m_%d %H:%M:%S")))

get_driver.py

from selenium import webdriver
from PO.练习计算器 import page

class GetDriver:

    #设置driver
    driver = None
    #   获取driver
    @classmethod
    def get_driver(cls):
        if cls.driver is None:
            #实例化浏览器
            cls.driver = webdriver.Chrome()
            #最大化
            cls.driver.maximize_window()
            #打开浏览器
            cls.driver.get(page.url)
        return cls.driver
        #单例原则

    #   关闭driver
    @classmethod
    def quit_driver(cls):
        if cls.driver:
            print('关闭之前',cls.driver)
            cls.driver.quit()
            print('关闭之后', cls.driver)
            cls.driver = None
            print('关闭之后', cls.driver)
            #注意此处有很大的坑,必须在关闭之后要置空

if __name__ == '__main__':
    #第一次获取浏览器
    print(GetDriver().get_driver())
    # 第二次获取浏览器
    print(GetDriver().get_driver())
    GetDriver.quit_driver()

2、page(页面对象):一个页面封装成一个对象,继承base,

????????模块名:page+实际操作模块名称;

????????类名:大驼峰命名:PageLogin

????????方法名:每个元素操作单独封装成一个方法

__init__.py:包含服务器配置url和计算器元素的定位方式

'''以下为计算器数据的配置数据'''
from selenium.webdriver.common.by import By

'''以下为服务器域名配置地址'''

url = "http://cal.apple886.com/"

#数字键

#加号
clac_add = By.ID, "simpleAdd"
#减号
clac_sub = By.ID, "simpleSubtr"
#乘号:
clac_multi = By.ID, "simpleMulti"
#除号
clac_divi = By.ID, "simpleDivi"
#等号
clac_equal = By.ID, "simpleEqual"
#清空
clac_clear = By.ID, "simpleClearAllBtn"
#获取结果
clac_result = By.ID, "simpleIpt"

page_cal_test.py

from selenium.webdriver.common.by import By
from PO.练习计算器 import page
from PO.练习计算器.base.base_cal_test import Base


class PageCalc(Base):
    #   输入数字方法
    def page_input_num(self,num):
        for i in str(num):
            #拆开单个按键定位方式
            loc = By.ID, "simple{}".format(i)
            self.base_click(loc)

    #   点击+操作符
    def page_click_add(self):
        self.base_click(page.clac_add)

    #   点击"等号"计算出结果
    def page_click_eq(self):
        self.base_click(page.clac_equal)

    #   获取结果
    def page_get_result(self):
        return self.base_get_ele_value(page.clac_result)

    #   点击清屏
    def page_clear(self):
        self.base_click(page.clac_clear)

    #   截图
    def page_get_image(self):
        self.base_get_image()
    #组装加法业务方法
    def page_calc(self,num1,num2):
        self.page_input_num(num1)
        self.page_click_add()
        self.page_input_num(num2)
        self.page_click_eq()

3、scripts/cases(业务层)

????????导包调用page,使用unittest框架调用page页面对象层完成业务流程测试需求

? ? ? ? 模块名:test+实际操作模块名称

? ? ? ?测试业务名称:大驼峰命名,把模块名抄写一下

test_calc.py

import json
import unittest
from parameterized import  parameterized

from PO.练习计算器.page.page_cal_test import PageCalc
from PO.练习计算器.base.get_driver import GetDriver
from PO.练习计算器.scripts.tools.read_json import read_json


def get_data():
    datas = read_json("calc.json")
    data = []
    for info in datas.values():
        data.append((info.get('num1'), info.get('num2'), info.get('except')))
    return data

class Test_calc(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        #获取driver
        cls.driver = GetDriver.get_driver()
        cls.calc = PageCalc(cls.driver)

    @classmethod
    def tearDownClass(cls):
        #关闭driver
        GetDriver.quit_driver()

    #测试加法方法
    @parameterized.expand(get_data())
    def test_add_calc(self,num1,num2,expect):
        #调用业务方法
            #进行计算
            self.calc.page_calc(num1,num2)
            try:
                #断言
                self.calc.assertEqual(self.calc.page_get_result(),expect)
            except:
                #截图
                self.calc.page_get_image()

在scripts/tools文件夹里添加对数据读取的封装函数

read_json.py

import json

def read_json(filename):
    with open('../data/'+ filename,'r' , encoding='utf-8') as f:
        return json.load(f)

if __name__ == '__main__':
    datas = read_json("calc.json")
    print(datas)

这里的read_json函数返回的是读取测试用例数据,格式如下,所以需要在test_calc.py文件中有对应的改造,需要的格式是:[( ),( ),( )]

?

在该项目中需要注意:

1、在需要定位网页元素的时候需要用到loc的时候,只用在查找元素那块使用*进行解码

2、注意:在关闭driver对象的语句之后一定要将driver重置为None

3、深刻体会封装的含义?

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:18:01  更:2022-09-15 02:18:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:42:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码