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

Selenium + Python 自动化测试20(PO模式)

        我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。

上一篇我们讨论了数据驱动测试中如何读取各种不同的文件中数据,以及如何完成重复的测试实例,今天我们继续学习。

         本篇笔记我们讨论一下如何使用PO模式思想来编写测试用例脚本。以便我们的测试代码更容易维护。

1、PO基础知识

1)PO:page object简述

 的简称,是selenium 自动化测试项目开发的最佳设计模式之一。它主要是通过对界面交互细节的封装。这样测试用例对应的脚本更关注与业务本身,也提高测试用例的可读性。

1)PO模式的优点:

a,可以减少代码的重复率

b,提高测试用例脚本的可读性

c,提高测试用例脚本的可维护性

2、page object 实例

1)page object 原理

         page object 原理是:我们将page 对象封装成一个HTML页面,通过应用程序特定API来操作页面元素。page 对象应该将GUI控件上查询和操作数据的行为封装为方法。这样就是页面的布局发生变化,page对象的接口并不会发生变化

2)page object实例-登录

我们先贴出来之前登录的例子:

# coding=utf-8#****************登录模块*******************import timefrom selenium import webdriverdef driver_func():return webdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")class Login():def __init__(self,username,password):self.username=usernameself.password=passworddef login(self):driver = driver_func()# 打开浏览器,并最大化driver.get("https://www.saucedemo.com/")driver.maximize_window()time.sleep(3)# 输入用户名,driver.find_element_by_name("user-name").send_keys(self.username)  # by name 定位# 输入密码driver.find_element_by_name("password").send_keys(self.password)  # by name 定位# 点击登录按钮driver.find_element_by_id("login-button").click()  # by ID 定位return driver

上面的登录的例子是参考模块化,用于后面来调用。

         我们PO模式大概步骤:写page类(封装所有页面共有的方法)>编写login 类(继承page类,封装登录操作需要的元素定位和操作)>编写测试用例脚本(如登录,调用login类)

请参考基础类:

#编写页面类,封装所有页面共有的方法class Page(object):login_url="https://www.saucedemo.com"def __init__(self,selenium_driver,base_page_url=login_url): #初始化方法来定义驱动,URL和超时时间self.base_page_url=base_page_urlself.driver = selenium_driverself.timeout = 30def _open(self,url):url = self.base_page_url +urlself.driver.get(url)assert self.on_page(),"没有打开%s"%urldef on_page(self):return  self.driver.current_url==(self.base_page_url + self.url)def open(self):self._open(self.url)def find_element(self,*loc):return self.driver.find_element(*loc)

login 页面类:

class LoginPage(Page):url = "/"#定位元素username_loc=(By.NAME,"user-name")password_loc=(By.NAME,"password")submit_loc =(By.ID,"login-button")#操作方法封装def enter_username(self,username):self.find_element(*self.username_loc).send_keys(username)def enter_password(self,password):self.find_element(*self.password_loc).send_keys(password)def submit(self):self.find_element(*self.submit_loc).click()

执行测试函数:

def test_login_Y(driver,username,password):login_page=LoginPage(driver)login_page.open()login_page.enter_username(username)login_page.enter_password(password)login_page.submit()if __name__ == "__main__":driver = webdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")username = 'standard_user'password = 'secret_sauce'test_login_Y(driver, username, password)time.sleep(3)UIResult = driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').textassert ("Products" == UIResult), "密码正确登录验证失败,fail"driver.quit()

今天就先学习到这里吧。后面我们再做优化,如PO模式和数据驱动整合在一起,自动输出HTML报告等。

每天进步一点点,加油!


http://www.mrgr.cn/news/8361.html

相关文章:

  • 常见操作系统上启动 MySQL 服务的命令:
  • Java常用的网络IO模型与限流算法总结
  • 深入理解 WebSocket:从基础概念到实战应用
  • 知识付费小程序引领线上直播
  • 【HTML】为网页添加表单(控件)
  • 计算机视觉(CV)技术的优势和挑战。
  • 【前端基础篇】JavaScript之DOM介绍
  • yolact导出onnx
  • 【每日一题 | 数据结构 | 树的转换与遍历】
  • Oracle SQL - 合并重叠的期间
  • 姿态识别 python 效果好,提供多种精准模型欢
  • C 语言的发展
  • 智慧社区信息系统建设:数据可视化与原型设计的力量
  • 代码随想录算法训练营第50天|卡码网 98. 所有可达路径
  • 项目开始后,拒绝客户提出的新需求是否会违约?
  • 独孤思维:我找到了可以一辈子赚钱的项目
  • 数据仓库系列 1:什么是数据仓库,它与传统数据库有什么不同?
  • AICon 全球人工智能与机器学习技术大会参会有感
  • Cargo: Rust的包管理和构建工具
  • SpringBoot集成kafka开发-消息消费的分区策略(消费者如何判断从哪个分区中消费消息的?)