selenium设计模式之------PageObject,自动化测试分层设计思想

一、定义:

PageObject,即页面对象。PO设计模式,是selenium中一种重要的设计模式。

二、原理:

就是把一个页面中的所有页面元素和页面操作,封装成一个页面类,这样在测试用例类中。只负责手工测试的业务逻辑。所以,要将原来的测试用例类拆分成page和case两部分。

三、作用:

如果前端页面发生变化,在某一个页面中,有某个页面元素的定位也随之发生变化。如果在几十甚至几百个测试用例中,都用到了这个页面元素,这样代码无法修改,PO的设计解决了这个问题

四、总结:

1、case
只包含测试用例方法,对该方法进行数据驱动测试。
每一行代码,对应一个操作

2、 page

  1. 元素定位:声明一个包含两个元素的元祖,存放操作方式及内容【By、Value】
login_link_loc = (By.LINK_TEXT, "登录")
  1. 元素操作:声明一个方法,封装对元素的操作
 def click_login_link(self):
        # self.driver.find_element(By.LINK_TEXT, "登录").click()
        # find_element()需要接受两个参数by和value.但是login_link_loc只是一个元组,是一个参数
        self.driver.find_element(*self.login_link_loc).click()
  1. 构造方法:接受测试用例类,传入浏览器,并和测试用例类使用同一浏览器
    def __init__(self, driver):
        self.driver = driver

五、代码结构:

(一)base_testcase类包

import time
import unittest2
from selenium import webdriver

class BaseTestCase(unittest2.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(5)
    def tearDown(self):
        time.sleep(20)

(二)page类包

  1. login_page.py
from selenium import webdriver
from selenium.webdriver.common.by import By
from page_object.my_dash_page import MyDashPage

class LoginPage:
    # login_link_loc的类型是元组,元组类似于数组
    # int a[2] = {2,3}
    # a = 2 和 3么?
    login_link_loc = (By.LINK_TEXT, "登录")
    username_input_loc = (By.ID, "loginform-identity")
    password_input_loc = (By.ID, "loginform-password")
    login_button_loc = (By.NAME, "login-button")
    url = "https://www.xueqingyun.com/"

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

    def open(self):
        self.driver.get(self.url)

    def click_login_link(self):
        # self.driver.find_element(By.LINK_TEXT, "登录").click()
        # find_element()需要接受两个参数by和value.但是login_link_loc只是一个元组,是一个参数
        self.driver.find_element(*self.login_link_loc).click()
    def input_username(self, username):
        self.driver.find_element(*self.username_input_loc).send_keys(username)
    def input_password(self, password):
        self.driver.find_element(*self.password_input_loc).send_keys(password)
    def click_login_button(self):
        self.driver.find_element(*self.login_button_loc).click()
        return MyDashPage(self.driver)
  1. my_dash_page,py
from selenium import webdriver
from selenium.webdriver.common.by import By

class MyDashPage:
    true_name_loc = (By.XPATH, '//*[@id="w7"]/li[2]/a')
    def __init__(self, driver):
        self.driver = driver
    def get_ture_name(self):
        return self.driver.find_element(*self.true_name_loc).text

(三)case类包

import time
import unittest2
from selenium import webdriver
from selenium.webdriver.common.by import By
from base.baseTestCase import BaseTestCase
from page_object.login_page import LoginPage
from page_object.my_dash_page import MyDashPage

class TestLogin(BaseTestCase):
    def test_login(self):
        lp = LoginPage(self.driver)
        lp.open()
        lp.click_login_link()
        lp.input_username("username")
        lp.input_password("111111")
        # 直接在点击登录按钮后,返回一个文本,就不需要单独的类获取这个文本
        mdp = lp.click_login_button()
        
        #通过一个单独的类实现,获取返回登录后的文本
        #mdp = MyDashPage(self.driver) 
        
        #断言
        self.assertEqual("管理员AAA", mdp.get_ture_name())

if __name__ == '__main__':
    unittest2.main()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值