python自动化web自动化:3.PO设计模式
Posted new nm个对象
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python自动化web自动化:3.PO设计模式相关的知识,希望对你有一定的参考价值。
1.pageObject模式
pageObject的核心思想,就是将一个页面封装成一个pageObject类。将页面上的主要元素的操作细节写成一个个方法。在写测试用例时我们就直接调用对应的pageObject类的接口,而不是在用例中去写操作细节。这样将使我们的代码维护性大大加强。
2.pageObject的六大原则
-
用公共的方法去代替页面的服务(将页面主要元素的操作细节,封装成公共方法)
-
封装的方法,不要暴露太多的细节给外界。而是以接口的形式供外界调用
-
断言不要跟操作细节一起封装在pageObject中
-
页面类中的一个方法如果会跳转到一个新的页面,应该返回到这个新的页面的封装类
-
不需要对一个页面中的所有元素进行建模,而是对页面的主要元素进行建模
-
对不同的结果,封装成不同的页面类方法(失败的情况也需要考虑到)
3.pageObject实战
案例:完成对企业微信首页,企业微信登录,企业微信注册。三个页面的pageObject封装
代码文件结构如下:
首页pageObject实现:
from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver
from web.page_workwx_login.login import Login
from web.page_workwx_login.register import Register
class Index:
"""企业微信首页pageObject"""
def __init__(self,driver:WebDriver): #driver:WebDriver,指定参数driver的类型为WebDriver,这样在使用时可以出现相关的方法提示
self._driver = driver
def goto_register(self):
"""点击立即注册按钮的方法"""
self._driver.get("https://work.weixin.qq.com/")
self._driver.find_element_by_class_name('index_head_info_pCDownloadBtn').click() #点击立即注册
return Register(self._driver) #返回立即注册页面的pageObject类,并且将这个driver传递给Register类
def goto_login(self):
"""点击企业登录按钮的方法"""
self._driver.get("https://work.weixin.qq.com/")
self._driver.find_element_by_class_name('index_top_operation_loginBtn').click() #点击企业登录
return Login(self._driver) #返回企业登录页面的pageObject类,并且将这个driver传递给Login类
登录页pageObject实现
from selenium.webdriver.remote.webdriver import WebDriver
from web.page_workwx_login.register import Register
class Login:
"""企业登录页面的pageObject类"""
def __init__(self,driver:WebDriver): #driver:WebDriver,指定参数driver的类型为WebDriver,
# 这样在使用时可以出现相关的方法提示
self._driver = driver #将之前pageObject类中的driver复用到这个pageObject中
def scan_login(self):
"""扫码登录的方法"""
pass #这个方法不好实现,所有不写
def goto_register(self):
"""实现点击立即注册按钮的方法"""
self._driver.find_element_by_class_name('login_registerBar_link').click() #点击立即注册
return Register(self._driver) ##返回立即注册页面的pageObject类,并且将这个driver传递给Register类
注册页pageObject实现
from time import sleep
from selenium.webdriver.remote.webdriver import WebDriver
class Register:
def __init__(self,driver:WebDriver):
self._driver = driver
def register(self):
"""实现form表单的注册功能方法"""
# 输入和点击等操作细节,这里我们就不写太具体。只完成两个操作示例即可
# 数据本来应该使用参数的方式来实现,这里直接写死
self._driver.find_element_by_id('corp_name').send_keys('熊熊公司') #输入公司
self._driver.find_element_by_id('manager_name').send_keys('熊大') #输入管理员姓名
sleep(5)
return True #这里应该返回注册完成后的页面
使用我们封装的pageObject接口,编写两条测试用例
第一个:首页点击立即注册》注册页注册
第二个:首页点击企业登录》登录页点击立即注册》注册页注册
from selenium import webdriver
from web.page_workwx_login.index import Index
class TestPage:
def setup(self):
self._driver = webdriver.Chrome()
self.index = Index(self._driver)
self._driver.implicitly_wait(5)
self._driver.maximize_window()
def teardown(self):
self._driver.quit()
def test_page1(self):
"""首页点击立即注册》注册页注册"""
self.index.goto_register().register()
def test_page2(self):
"""首页点击企业登录》登录页点击立即注册》注册页注册"""
self.index.goto_login().goto_register().register()
以上是关于python自动化web自动化:3.PO设计模式的主要内容,如果未能解决你的问题,请参考以下文章
selenium.common.exceptions.InvalidSessionIdException通过Python在无头模式下使用GeckoDriver Selenium Firefox(示例代
Python+Selenium+Unittest实现PO模式web自动化框架
Selenium3与Python3实战 Web自动化测试框架