国外素材网站,谷歌搜索引擎 google,国内新闻最近新闻今天,宝丰县精神文明建设的门户网站1. 任务概述 利用 UnitTest 与 Selenium 编写自动化用例#xff0c;测试在线加法器中的整数单次加法功能【如123 】 人工操作流程#xff08;测试 12 是否等于 3#xff09;#xff1a;
打开在线加法器点击按钮1#xff0c;再点击按钮#xff0c;再点击按钮2#xff0c…1. 任务概述 利用 UnitTest 与 Selenium 编写自动化用例测试在线加法器中的整数单次加法功能【如123 】 人工操作流程测试 12 是否等于 3
打开在线加法器点击按钮1再点击按钮再点击按钮2再次点击按钮观察计算机框框的计算结果是否等于3若出现错误则截图保留否则测试通过关闭浏览器
自动化测试编写流程 使用 selenium 实例化浏览器打开在线加法器并最大化窗口 使用 CSS 选择器定位至按钮清屏点击【此处是为了保险】 使用 CSS 选择器定位至按钮1点击 使用 CSS 选择器定位至按钮点击 使用 CSS 选择器定位至按钮2点击 使用 CSS 选择器定位至按钮点击 使用 CSS 选择器定位至结果框框获取此组件value值并与预期结果3进行比对过程中发生错误截图保留 关闭浏览器
2. PO模式 Page Objece分层机制让不同层去做不同类型的事情让代码结构清晰增加复⽤性 两层对象逻辑层 业务数据层三层对象库层 逻辑层 业务数据层【本案例所使用】四层对象库层 逻辑层 业务层 数据层
base层 将最基础的一类方法进行封装如点击click获取value值浏览器实例化等操作通过被继承从而实现复用 page层 定义一些配置数据如在线计算器网址各按钮的定位方式等同时通过继承 Base 类得到一些基础方法在此基础上进一步完善处理逻辑 scripts层 编写测试类完善业务处理流程script 调用 page 并设置断言【即结果是否正确】发生错误时完成截图并存储至于 image 层 3. 源码详情 base层
base.py
import time
from selenium.webdriver.support.wait import WebDriverWait
class Base:# 初始化方法def __init__(self,driver):self.driver driver# 查找元素def base_find_element(self,loc,timeout30,poll_frequency0.5)::param loc: 元素的定位信息格式为元组:param timeout: 显式等待最长时间:param poll_frequency: 显式等待请求间隔:return: 返回查找到的对象# 显式等待特定组件return WebDriverWait(self.driver,timeouttimeout,poll_frequencypoll_frequency).until(lambda x:x.find_element(*loc))# 点击def base_click(self,loc):self.base_find_element(loc).click()# 获取组件value属性值def base_get_value(self,loc):return self.base_find_element(loc).get_attribute(value)# 截图def base_get_img(self):self.driver.get_screenshot_as_file(f../image/{time.strftime(%Y_%m_%d %H_%M_%S)}.png)get_driver.py
from selenium import webdriver
from calcTestProject import page
class GetDriver:driver None# 获取driverclassmethoddef get_driver(cls):if cls.driver is None:option webdriver.ChromeOptions()# 指定chrome存储路径的二进制形式option.binary_location page.binary_location# 实例化浏览器cls.driver webdriver.Chrome(optionsoption)# 最大化窗口cls.driver.maximize_window()# 打开浏览器cls.driver.get(page.url)return cls.driver# 推出driverclassmethoddef quit_driver(cls):if cls.driver:cls.driver.quit()# 置空cls.driverNonepage层
__init__.py
from selenium.webdriver.common.by import By
以下为服务器域名配置数据
url http://zaixianjisuanqi.bmcx.com
# 谷歌浏览器位置
binary_locationD:\Chrome\Google\Chrome\Application\chrome.exe
以下为计算器配置数据
# 加号
clac_add (By.CSS_SELECTOR,#simpleAdd)
# 等号
clac_eq (By.CSS_SELECTOR,#simpleEqual)
# 获取结果
clac_result (By.CSS_SELECTOR,#resultIpt)
# 清屏
clac_clear (By.CSS_SELECTOR,#simpleClearAllBtn)page_calc.py
from calcTestProject.base.base import Base
from selenium.webdriver.common.by import By
from calcTestProject import page
class PageCalc(Base):# 点击数字方法def page_click_num(self,num):for n in str(num):# 按照计算需求拼接数字按键的locloc (By.CSS_SELECTOR,f#simple{n})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_eq)# 获取结果方法def page_get_value(self):self.base_get_value(page.clac_result)# 点击清屏def page_click_clear(self):self.base_click(page.clac_clear)# 截图def page_get_image(self):self.base_get_img()# 组装加法业务方法def page_add_calc(self,a,b):# 清屏self.page_click_clear()# 点击第一个数self.page_click_num(a)# 点击加号self.page_click_add()# 点击第二个数self.page_click_num(b)# 点击等号self.page_click_eq()# 返回计算结果return self.page_get_value()script层
test_calc.py
import unittest
from parameterized import parameterized
from calcTestProject.page.page_calc import PageCalc
from calcTestProject.base.get_driver import GetDriverclass TestCalc(unittest.TestCase):# 类前置操作classmethoddef setUpClass(cls):# 获取driver对象cls.driver GetDriver().get_driver()cls.calc PageCalc(cls.driver)# 下拉条防止广告遮挡js window.scrollTo(0,256)cls.driver.execute_script(js)# 类后置操作classmethoddef tearDownClass(cls):GetDriver().quit_driver()# 测试加法方法12是否等于3parameterized.expand(((1,2,3),))def test_add_calc(self,a,b,expect):# 调用计算业务方法self.calc.page_add_calc(a,b)try:# 断言【判断测试结果】self.assertEqual(self.calc.page_get_value(),str(expect))except:# 截图self.calc.page_get_image()