web自动化——PO模式

web自动化——PO模式

PO模式的解释

  • PageBbject == 面向对象模式
  • web页面的用例=不同页面当中,不用的功能串起来的
  • 例如P2P的投资成功用例=登录界面的登录+首页选标+标的页面的投标+个人页面的余额和交易记录;
  • 投资失败的用例=登录界面的登录+首页选标+标的页面的投标+错误提示;
  • 由上面可以看出,平铺直述写用例的方式会写很多冗余的代码
  • 因此,我们可以将每个页面所需要的元素都封装起来,写用例的时候根据操作步骤直接调用页面的功能方法即可
  • 这个就是PO模式,也成为封层设计

PO模式的应用

  • 写的时候在test用例中打开会话,访问链接,在页面中接收diver(传入初始化函数),在用例界面调用的时候直接传在类名中,详见下方代码.
  • 登录界面和首页的代码:
#登录
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class Login:

    def __init__(self,driver):
        # 打开一个会话
        self.driver = driver

    def login(self,phone,pwd):
        WebDriverWait(self.driver,20).until(
            EC.visibility_of_element_located(
                (By.NAME,"XXX")))
        #这里是没有提示的,原因是diver是外部传进来的方法
        self.driver.find_element_by_name("XXX").send_keys(phone)
        self.driver.find_element_by_name("XXX").send_keys(pwd)
        self.driver.find_element_by_xpath(
            'XXX').click()


    def error_msg(self):
        WebDriverWait(self.driver,20).until(
            EC.visibility_of_element_located(
                (By.XPATH,'XXX')))
        return self.driver.find_element_by_xpath('XXX').text #返回text信息
#首页
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class HeadPage:

    def __init__(self,driver):
        self.dirver = driver

    def head_page(self):
        try:
            WebDriverWait(self.dirver,20).until(
                EC.visibility_of_element_located(
                    (By.XPATH,'XXX')))
            return True
        except:
            return False
import unittest
from selenium import webdriver
from web_unittest.test_PO.page_object.class_login_page import Login
from web_unittest.test_PO.page_object.class_head_page import HeadPage
class TestLogin(unittest.TestCase):

    def setUp(self):
        # 打开一个会话
        self.driver = webdriver.Chrome()
        # 全屏
        self.driver.maximize_window()
        self.driver.get('XXX')

    #登录成功
    def test_login_success(self):
        #在本页面打开会话,将diver传入页面page的初始化函数中,调用的时候直接传入
        Login(driver=self.driver).login('XXX','XXX')
        self.assertTrue(HeadPage(driver=self.driver).head_page())

    #登录失败——没有密码
    def test_login_no_pwd(self):
        Login(driver=self.driver).login('XXX', '')
        actual = Login(driver=self.driver).error_msg()
        excpet = "请输入验证码!"
        self.assertEqual(excpet,actual)

    def tearDown(self):
        self.driver.quit()
  • 运行结果:
  • 在这里插入图片描述

版权声明:本文为weixin_43754879原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。