python自动化(三)web自动化:3.PO设计模式

1.pageObject模式

pageObject的核心思想,就是将一个页面封装成一个pageObject类。将页面上的主要元素的操作细节写成一个个方法。在写测试用例时我们就直接调用对应的pageObject类的接口,而不是在用例中去写操作细节。这样将使我们的代码维护性大大加强。

2.pageObject的六大原则

  1. 用公共的方法去代替页面的服务(将页面主要元素的操作细节,封装成公共方法)

  2. 封装的方法,不要暴露太多的细节给外界。而是以接口的形式供外界调用

  3. 断言不要跟操作细节一起封装在pageObject中

  4. 页面类中的一个方法如果会跳转到一个新的页面,应该返回到这个新的页面的封装类

  5. 不需要对一个页面中的所有元素进行建模,而是对页面的主要元素进行建模

  6. 对不同的结果,封装成不同的页面类方法(失败的情况也需要考虑到)

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()
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值