目录
前言:
一、 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 = Nonedef 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.elementdef 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_LOCclass PasswordInput(BasePageElements):locator = LoginPageLocators.PASSWORD_INPUT_LOCclass 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