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

Posted new nm个对象

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

以上是关于python自动化web自动化:3.PO设计模式的主要内容,如果未能解决你的问题,请参考以下文章

30道python自动化测试面试题

selenium.common.exceptions.InvalidSessionIdException通过Python在无头模式下使用GeckoDriver Selenium Firefox(示例代

Python+Selenium+Unittest实现PO模式web自动化框架

Selenium3与Python3实战 Web自动化测试框架

Python+Selenium+Unittest实现PO模式web自动化框架

Python+Selenium+Unittest实现PO模式web自动化框架