当前位置: 首页 > news >正文

使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 21--PO(POM) 设计模式代码实现和全局浏览器驱动设置

测试学习记录,仅供参考!

一、 PO(POM)设计模式代码实现

管理页面类和页面元素

1、在项目根目录下新建名称为 pageObject(用来管理页面类) 的软件包,在 pageObject 软件包下新建名称为 login_page(登录页面) 的目录文件,在 login_page 目录下新建名称为 login_page.py 的 Python 文件;

定义一个测试类,因为 class LoginPage 是一个页面类,所以不需要以 test 开头;这个页面类里面去维护一些元素定位和操作,首先得先导入定位元素 By 类 ,这里写一个类变量,使用类属性,不需要 __init__ 初始化为实例属性,一般正常写法是“self.driver.find_element(By.NAME, 'username')”,但是每一个都这么写的话很不方便,此时需要引入前面介绍过的二次封装(找到元素方法)方法,导入 BasePage 类,然后使用页面类去继承 BasePage 类(这样页面类就可以用到已经封装好的公共方法了)

把被测试页面的 url 地址、用户名、密码、登录按钮等都放到页面类里面管理,先完成“元素”,再继续“操作”,例如:第一个 登录操作,定义一个 def login(): 函数,登录里面带两个参数(self, user_name, pass_word):就是要输入的操作,输入的用户名(user_name)和密码(pass_word),使用 self.open_url()(因为页面类已经继承了公共的webdriver 二次封装方法,所以可以使用 BasePage 类里面的任何属性和方法) 打开页面,里面把 url 传过来,还是通过 self.url 调用这个 LoginPage 类 url 变量(self.url 中的 self 是表示类本身的意思),下一步跟着输入操作(输入操作亦已经封装了,同样的通过 self. 点调用,注意二次封装方法的参数若有默认值的可以不填)

为什么要对 webdriver 里面的方法进行二次封装,为了页面类使用的时候更方便,不用每一个都去写一个“去查找、去定位 driver.find_element(By.NAME, 'username')”,简化了代码量,这就是二次封装的一个好处;

from selenium.webdriver.common.by import By
from util_tools.basePage import BasePageclass LoginPage(BasePage):url = 'http://localhost:8088/ecshop/user.php'# 用户名username = (By.NAME, 'username')# 密码password = (By.NAME, 'password')# 登录按钮submit = (By.NAME, 'submit')# 登录操作def login(self, user_name, pass_word):# 打开网址self.open_url(self.url)# 输入用户名self.send_keys(self.username, user_name)# 输入密码self.send_keys(self.password, pass_word)# 点击登录按钮self.click(self.submit)

至此,登录页面的第一个操作“登录操作”就已经封装完成了;

管理测试类

2、改造 testcase 软件包 login 目录下 test_login.py 文件;

先导包引入 LoginPage 类,登录成功里面的‘打开浏览器’、‘定位信息’、已经在上一步的页面类中维护了(元素),所以不需要了;一些输入的操作也是在页面类(操作)中维护,亦不需要了;这时候需要直接用到页面类,把导进来的 LoginPage 类直接用就行了;

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from pageObject.login_page.login_page import LoginPageclass TestLogin:
http://www.dtcms.com/a/525239.html

相关文章:

  • 旋转花键如何实现微米级定位误差控制?
  • 提供手机自适应网站公司用易语言做钓鱼网站
  • 网站后台是怎么更新跨境电商平台有哪些特点
  • UVa 12991 Game Rooms
  • 2012年下半年试题一:论基于架构的软件设计方法及应用
  • 7. Python 列表:从概念本质到实战应用
  • Windows 安装 postGreSQL 数据库
  • 双堆法求数据流的中位数
  • 平面设计师灵感网站开发三味
  • 使用Requests和正则表达式实现起点中文网小说爬取
  • 擅自使用他人产品做网站宣传网站后台编辑器上传不了图片
  • argocd发布实现预检和后检能力
  • 受欢迎的免费网站建设游戏开发和网站开发哪个好玩
  • 网站建设 软件开发的公司办公网站模板
  • 内蒙古知名网站建设wordpress 摄影博客
  • 掌握 Gemini CLI:自定义命令 (Slash Commands)
  • 平面设计师常用网站铁岭网站建设公司
  • 个人网站做推广wordpress增加论坛
  • oracle存储过程详解
  • 多线程六脉神剑第三剑:信号量 (Semaphore)
  • 网站外链怎么购买网站建设方案计划书
  • 在C#中详细介绍一下Visual Studio中如何使用数据可视化工具
  • TDengine 数据函数 ROUND 用户手册
  • 网上做网站怎么做下拉菜单广告设计软件下载
  • LeetCode 406 - 根据身高重建队列
  • ELK运维之路(异常日志告警)
  • 从零开始的C++学习生活 14:map/set的使用和封装
  • 只做同城交易的网站wordpress自定义文章类型分类模板
  • 做外贸要看哪些网站阿里云做网站怎么样
  • 常州市经开区建设局网站东莞h5网站建设