高效易懂,打造维护性好的Web自动化测试框架PO模式精讲

目录

前言:

一、 PO概述

二、PO何实现于Web框架素自动化测试重中之重。

1.为了保证易维护性和易读性,我们可以在项目中定义一个统一的库,用来存放所有的定位器类。

2.定义一个基础的类,该类用于针对PO的元素定位进行封装。

3.基础类之后,我们就可以定义具体的PO元素了。

总结:


前言:

随着SaaS、PaaS、IaaS等“云服务”在企业中广泛应用,企业的软件开发也日益向云平台迁移。而WEB应用程序是目前最广泛使用的应用程序之一。在WEB开发中,动框架为常态封装自动框架为重要。

一、 PO概述

随着SaaS、PaaS、IaaS等“云服务”在企业中广泛应用,企业的软件开发也日益向云平台迁移。而Web应用程序是目前最广泛使用的应用程序之一。在Web开发中,自动化测试框架成为常态,其中封装的自动化框架最为重要,这篇文章将介绍如何针对表现层的PO元素进行自动化定位。

Page Object模式是一种常用的自动化测试框架模式,目的是将Web页面抽象为一个对象,将业务流程功能尽量细分,避免冗余代码逻辑。同时,也为自动化测试提供了更好的可维护性、代码复用性。Page Object就是用来描述页面上的行为和数据,并封装为一个对象的。

在Page Object模式中,一个页面包含许多元素,如输入框、按钮、复选框等,我们把这些元素抽象为一个个组件,每个组件对应着页面中的一个元素。将用户在页面上的操作拆分为一个个组件,便于代码组织和代码复用。

由此可以看出,PageObject模式有两个核心点:

1.把页面上的每一个页面元素抽象出来,封装为一些方法(组件);
2.让测试用例去调用这些方法(组件),实现Web自动化测试。

二、PO何实现于Web框架素自动化测试重中之重。

在Selenium WebDriver中,元素定位有8种方式,分别是classname、css selector、id、link text、name、partial link text、tag name和xpath。

在进行页面元素自动定位时,需要考虑以下几个因素:

1.易维护性:代码逻辑精简,方便后期维护。
2.易读性:在写代码时,尽量保持代码的易读性,让代码可读性更好,便于后续修改。
3.鲁棒性:尽可能避免页面元素的变化带来的测试用例失败,降低维护成本。

基于这几个因素,我们可以封装一些方法来满足PO模式。具体步骤如下:

1.为了保证易维护性和易读性,我们可以在项目中定义一个统一的库,用来存放所有的定位器类。

例如:

class LoginPageLocators:



    # 名称输入框定位器
    USERNAME_INPUT_LOC = ('id', 'username')

    # 密码输入框定位器
    PASSWORD_INPUT_LOC = ('id', 'password')

    # 登录按钮定位器
    LOGIN_BUTTON_LOC = ('xpath', '//*[@id="login-btn"]')

2.定义一个基础的类,该类用于针对PO的元素定位进行封装。

例如:

class BasePageElements:



    locator = None # 元素定位器

    def __init__(self, driver: WebDriver):
        self.driver = driver # 初始化浏览器驱动
        self.element = None

    def find(self, wait_time=5):
        """元素查找"""
        WebDriverWait(self.driver, wait_time).until(
            EC.presence_of_element_located(self.locator))
        self.element = self.driver.find_element(*self.locator)
        return self.element

    def click(self):
        """元素点击"""
        self.find().click()

    def send_keys(self, value):
        """元素输入"""
        self.find().send_keys(value)

    def get_text(self):
        """获取元素文本"""
        return self.find().text

3.基础类之后,我们就可以定义具体的PO元素了。

例如:

class UsernameInput(BasePageElements):
    locator = LoginPageLocators.USERNAME_INPUT_LOC


class PasswordInput(BasePageElements):
    locator = LoginPageLocators.PASSWORD_INPUT_LOC


class LoginButton(BasePageElements):
    locator = LoginPageLocators.LOGIN_BUTTON_LOC

在具体实现时,我们只需要在测试用例中引入这些类即可。

例如:

class TestLogin:



    def setup_method(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(20)
        self.login_page = LoginPage(self.driver)
        self.login_page.open()

    def test_login(self):
        username_input = UsernameInput(self.driver)
        password
_input = PasswordInput(self.driver)
        login_button = LoginButton(self.driver)
        username_input.send_keys('example')
        password_input.send_keys('password')
        login_button.click()

在上述代码中,我们先初始化驱动对象,然后实例化LoginPage对象,并打开登录页面。接着我们通过实例化一个元素对象,来使用自定义的方法进行定位和操作。完成登录操作后,我们可以在测试用例中进行断言,以判断登录模块的正确性。

总结:

在这篇文章中,我们对PO模式进行了简单的介绍,并针对PO元素的自动定位进行了封装。以此来满足易维护、易读、鲁棒的原则,提高Web自动化测试的可靠性和可维护性。

作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试的学习资源,如果你用得到的话可以直接拿走,希望能对你带来帮助。(包括Python编程、WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、性能测试、安全测试、大厂面试真题、简历模板等等),相信能使你更好的进步!

获取方式:留言【自动化测试学习】即可免费获取

【自动化测试交流】:574737577(进群备注ccc)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=5Yy1aF4jOfrqXFA_eg14oG9EZ5fFbv5A&authKey=zYx3Zivwu55NOCM%2B%2BKqaZjoeTRS5xMdAmfqX%2FyzUm4lvrD4q75P5Ukeg%2FPBRMMbm&noverify=0&group_code=574737577

猜你喜欢

转载自blog.csdn.net/Free355/article/details/130765115