写好BasePage基类和页面元素定位后,就可以针对每个页面写业务逻辑了

1.编写每个页面page类,拿其中一个页面为例

fourth_page.py(名字我随便取的,实际中希望能取一些有意义的名字)

# coding: utf-8
# author: hmk from pages.BasePage import BasePage
from locators.locators import Locators class FourthPage(BasePage):
"""定义一个page类,继承自BasePage类"""
upload_button1 = Locators.fourth_page_locators["upload_button1"] # 材料列表第一个材料的上传按钮
upload_t = Locators.fourth_page_locators["upload_t"]
upload_true = Locators.fourth_page_locators["upload_true"] # 去掉上传隐藏属性后的真实上传按钮
confirm = Locators.fourth_page_locators["confirm"] # 上传弹窗的确定按钮
nextstep = Locators.fourth_page_locators["nextstep"] # 下一步按钮
backstep = Locators.fourth_page_locators["backstep"] # 上一步按钮 def upload_button(self):
"""点击【上传】按钮"""
self.click(self.upload_button1) def upload_local(self):
"""在上传弹窗中继续点击【本地上传】按钮"""
self.click(self.upload_t) def hand_js(self):
"""调用js方法,执行js脚本"""
js = 'document.querySelector("#i_select_files>input").style="";'
self.script(js) def true_upload(self):
"""去掉上传按钮隐藏属性后,传入文件"""
self.send_keys(self.upload_true, "D:\\QQfile\qw.txt") def confirm_button(self):
"""点击【确定】关闭弹窗"""
self.click(self.confirm) def next_step(self):
"""点击【下一步】,进入下一页面"""
self.click(self.nextstep)

通过调用BasePage中的方法,来进一步编写这个页面用到的一些操作,最后在测试用例中根据业务场景来调用这些封装好的方法

2.编写测试用例

# coding: utf-8
# author: hmk import unittest
import time
from pages.first_page import FirstPage
from pages.second_page import SecondPage
from pages.third_page import ThirdPage
from pages.fourth_page import FourthPage
from selenium import webdriver class TestUni(unittest.TestCase): @classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.url = "approveSeq=6578"
# self.run = BasePage(self.driver)
# self.run.open(self.url)
cls.first = FirstPage(cls.driver)
cls.first.open(cls.url)
cls.second = SecondPage(cls.driver)
cls.third = ThirdPage(cls.driver)
cls.fourth = FourthPage(cls.driver) @classmethod
def tearDownClass(cls):
time.sleep(2)
cls.driver = cls.driver
cls.driver.quit() def test_01(self):
time.sleep(6)
self.driver.implicitly_wait(30)
# self.first.click_agree_button()
print(self.first.get_current_url())
self.first.click_agree_button() def test_02(self):
time.sleep(3) self.second.handle_js()
# js = "var q = document.documentElement.scrollTop=1000"
# self.driver.execute_script(js)
self.driver.implicitly_wait(30)
self.second.begin_deal()
time.sleep(6) def test_03(self):
self.third.handle_js() #
self.third.input_custName()
self.third.input_custAddr()
self.third.input_custLegalMan()
self.third.input_custCerId()
self.third.input_custContactPerson()
self.third.input_custCardId()
self.third.click_nextstep()
if __name__ == "__main__":
unittest.main()

在每个用例汇中调用page类中定义的操作方法,构建业务场景。

综合前面几篇内容,把如何根据page objects设计模式进行ui自动化测试的思路以及基本实现方法说了一遍,当然其中还有一些不足,后续功能可以自己根据需要添加(比如添加日志、添加每一步的断言、生成测试报告)


2018-05-11 15:56:42

selenium+Page Objects(第三话)的更多相关文章

  1. selenium+Page Objects(第一话)

    简单介绍一种selenium用来做web自动化测试的设计模式:Page Objects 一.Page Objects介绍 用官话说它是selenium中的一种页面对象设计模式(不是测试框架!是一种开展 ...

  2. selenium+Page Objects(第二话)

    前面介绍了什么是po模式,并且简单分析了一下使用po模式编写脚本的思路,接下来开始正式编写 1.先编写一个页面基类BasePage.py,里面封装每个页面常用的一些方法 # coding: utf-8 ...

  3. Selenium - WebDriver: Page Objects

    This chapter is a tutorial introduction to page objects design pattern. A page object represents an ...

  4. 通过Java + selenium +testNG + Page Objects 设计模式 实现页面UI的自动化

    Page Objects 设计模式 简单的讲,类似与Java面向对象编程,把每个页面都抽象为一个对象类,将页面元素的定位.业务逻辑操作分离开,然后我们可以通过testNG实现业务流程的控制 与 测试 ...

  5. 移动UI自动化-Page Objects Pattern

    移动UI自动化,看起来美好,践行起来却难.做个目光短见的务实主义者.Page Objects Pattern是Selenium官方推崇的方式,最近研究写测试用例最佳实践之Page Objects,同时 ...

  6. [小北De编程手记] [Lesson 02] AutoFramework构建 之 Page Objects - 设计模式

    写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的 ...

  7. Page Objects

    Page Objects 原文地址:https://github.com/SeleniumHQ/selenium/wiki/PageObjects Within your web app's UI t ...

  8. selenium webdriver (python) 第三版

    感谢 感谢购买第二版的同学,谢谢你们对本人劳动成果的支持!也正是你们时常问我还出不出第三版了,也是你们的鼓励,让我继续学习整理本文档. 感谢乙醇前辈,第二版的文档是放在他的淘宝网站上卖的,感谢他的帮忙 ...

  9. [Protractor] Testing With Protractor Page Objects

    Protractor Page Objects are a recommended for testing your AngularJS applications. Page Objects abst ...

随机推荐

  1. vc++读取文件属性的详细信息描述 通过读取QQ的注册表和EXE路径两种方式

    转载:http://www.cnblogs.com/pythonschool/archive/2012/10/18/2729872.html // File: GetFileVersion.cpp / ...

  2. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(2)

    2.连接相关 名称 类型 说明 Connection 指向一个数据库连接对象 Disconnected 设置为True将在数据库关闭后继续保持数据集的开启状态. 3. 数据获取 名称 类型 说明 Fe ...

  3. Python3 tkinter基础 Listbox for+insert 将list中元素导入listbox中

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  4. Docker 入门指南——资源工具篇

    好工具 dive wagoodman/dive A tool for exploring each layer in a docker image 参考 用 Dive 看 Docker Image 裡 ...

  5. Pytest 简明教程

    pytest-learn 通过文章 Python 单元测试框架之 Pytest 剖解入门(第一篇) 学习 Pytest. 有很多的第三方插件可以自定义扩展,并且支持 Allure,生成可视化的测试报告 ...

  6. upc组队赛1 黑暗意志【stl-map】

    黑暗意志 题目描述 在数千年前潘达利亚从卡利姆多分离之时,迷雾笼罩着这块新形成的大陆,使它不被外来者发现.迷雾同样遮蔽着这片大陆古老邪恶的要塞--雷神的雷电王座.在雷神统治时期,他的要塞就是雷电之王力 ...

  7. LVM基本应用,扩展及缩减实现

    一.基本概念 如上图所示:底层PV(物理卷可能是硬盘设备,分区或RAID等),一个或多个PV组织成一个VG(卷组),卷组是不能直接格式化使用的,所以在VG之上,还需要创建LV进行格式化使用.VG在逻辑 ...

  8. tp剩余未验证内容-5

    经过实践, ie678是不能正确显示解析bs的,所以要用ff和chrome浏览器. page-header类是有特殊样式的 在标题下有一条浅色的细线条,源代码中有: border-bottom: 1p ...

  9. (转)开源项目miaosha(下)

    石墨文档:https://shimo.im/docs/2XlwliBQAYsKCHbq/ (二期)20.开源秒杀项目miaosha解读(下) [课程20]jmeter.xmind81.5KB [课程2 ...

  10. UVA11417 GCD

    题目地址 题目链接 题解 先讨论任何没有限制的情况 \[ \large { \begin{aligned} &\sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j)\\ &a ...