Python3-Selenium3使用PO设计模式(Page Object)实现简单的页面登录操作
2017-12-18 15:37
1286 查看
博文章节
博文章节本机环境介绍
PO设计模式概念及优点
项目目录结构
PO基类
登录页PO设计模式
测试类
拓展
本机环境介绍
编码语言(Python)(py3env) C:\Users\XXX\iCloudDrive\PycharmProjects\SAT>python -V Python 3.6.2
Selenium版本(3.7.0)
(py3env) C:\Users\XXX\iCloudDrive\PycharmProjects\SAT>pip show selenium Name: selenium Version: 3.7.0 Summary: Python bindings for Selenium
PO设计模式(概念及优点)
概 念PO(Page Object)设计模式是一种面向对象(页面对象)的设计模式,将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。
优点
可以使代码复用,降低维护成本,提高程序可读性和编写效率。
可以将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),提高用例的可维护性。
项目目录结构
C:. ├─docs # 文档目录 ├─logs # 日志目录 ├─sat │ ├─ui │ │ ├─base │ │ │ └─__init__.py │ │ │ └─base_page.py # PO基类 │ │ │ └─browser_engine.py # 浏览器引擎类 │ │ │ └─browser_type.py # 浏览器类型类(暂没使用) │ │ ├─pom │ │ │ └─__init__.py │ │ │ └─login_page.py # 登录页(PO设计模式) │ │ ├─resource │ │ │ └─chromedriver.exe # Chrome浏览器驱动 │ │ │ └─geckodriver.exe # Firefox浏览器驱动 │ │ │ └─IEDriverServer.exe # IE浏览器驱动 │ ├─utils │ │ └─__init__.py │ │ └─common.py # 公共工具类 │ └─__init__.py │ └─settings.py # 系统配置类 └─test │ └─__init__.py │ └─test.py # 测试类 └─requirements.txt # 包管理
PO基类
base_page.py# -*- coding: utf-8 -*- """ @desc: page object测试基类 @author: Amio_ @file: base_page.py @date: 2017/12/18 12:01 """ from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from sat import settings class BasePage(object): def __init__(self, driver, url): self._driver = driver self._url = url def open(self, page_title=None): """ 打开指定网页 :param page_title: 网页title, 不必填 :return: 若传入的page_title与网页title不同则触发断言 """ self._driver.maximize_window() self._driver.get(url=self._url) if page_title is not None: assert page_title in self._driver.title def find_element(self, *locator, timeout=None): try: return self._init_wait(timeout).until(EC.visibility_of_element_located(locator=locator)) except (NoSuchElementException, TimeoutException): self._driver.quit() raise TimeoutException(msg='寻找元素失败, 定位方式为: {}'.format(locator)) def send_keys(self, webElement, keys): webElement.clear() webElement.send_keys(keys) def _init_wait(self, timeout): if timeout is None: return WebDriverWait(driver=self._driver, timeout=settings.UI_WAIT_TIME) else: return WebDriverWait(driver=self._driver, timeout=timeout)
登录页(PO设计模式)
login_page.py<4000
/p>
# -*- coding: utf-8 -*- """ @desc: 登录页PO @author: Amio_ @file: login_page.py @date: 2017/12/18 12:01 """ from selenium.webdriver.common.by import By from sat.ui.base.base_page import BasePage class LoginPage(BasePage): URL = 'https://www.douban.com/' USERNAME = (By.ID, 'form_email') PASSWORD = (By.ID, 'form_password') SUBMIT_BTN = (By.XPATH, "//input[@class='bn-submit']") def __init__(self, driver): super().__init__(driver=driver, url=self.URL) def login(self): self.open('豆瓣') self.send_keys(webElement=self.find_element(*self.USERNAME), keys='xxxxx') self.send_keys(webElement=self.find_element(*self.PASSWORD), keys='xxxxx') self.find_element(*self.SUBMIT_BTN).click()
测试类
test.py# -*- coding: utf-8 -*- """ @desc: 测试类 @author: Amio_ @file: test.py @date: 2017/12/18 12:06 """ from sat.ui.base.browser_engine import BrowserEngine from sat.ui.pom.login_page import LoginPage class Test(object): driver = BrowserEngine().init_driver() # 浏览器引擎初始化(实现方式往下看...) def test_login(self): LoginPage(driver=self.driver).login() # 调用登录方法,可复用 self.driver.quit() # 注意, 结束操作一定要调用quit()方法,否则进程一直在 我是用py.test框架执行的, py.test -q test.py
拓展
浏览器引擎实现方法,请点击我项目Github下载地址
相关文章推荐
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
- Selenium的PO模式(Page Object Model)[python版]
- Selenium Page Object(PO)设计模式
- Selenium的PO模式(Page Object Model)[python版]
- Selenium+Python :WebDriver设计模式( Page Object )
- selenium Object Page 设计模式理解及实现!
- 使用Object-C实现23种设计模式之工厂方法模式
- selenium设计模式之PageObject
- 使用Object-C实现23种设计模式之抽象工厂模式
- 使用Python语言写一个简单的KMP模式匹配算法实现
- Python+Selenium使用Page Object实现页面自动化测试
- ASP.NET jQuery 食谱11 (通过使用jQuery validation插件简单实现用户登录页面验证功能)
- 使用ajax技术实现简单登录操作
- Python+Selenium框架设计--- Page Object Model
- selenium从入门到应用 - 4,页面对象设计模式的实现
- 使用Object-C实现23种设计模式之单例模式
- 设计模式一(简单工厂,采用python实现)
- 使用Object-C实现23种设计模式之建造者模式
- ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能