PageObjects 设计模式 , pageobject设计原理
Page Object 概念:
Page Object 是指UI界面上用于与用户进行交互的对象 。 它可以指整个页面 , 也可以说是指Page上的某个区域 。 Page Object 是你的测试代码的交互对象 , 是对实际UI的一种抽象模型化 。 通过Page Objects 可以减少重复代码的编写 , 例如 , 很多页面都可以有同样的header,footer,navigator等部分 , 如果对这些进行抽象 , 只写一次就可以在其他地方通用了 。
PageObjects 设计模式概念:
PageObjects 是selenium中的一种测试设计模式 , 是将每一个页面设计为一个Class , 其中包含页面中需要测试的元素(按钮 , 输入框 , 标题等) , 这样在Selenium 测试页面中可以看到通过调用页面类来获取页面元素 , 这样巧妙地避免了当页面元素id或者位置变化时 , 需要该测试页面代码的情况 。 当页面元素id变化时 , 只需要更改测试页Class中页面属性即可 。 简单来讲 , 就是将代码以页面为单位进行组织 , 针对这个页面上的所有信息 , 相关操作都放到一个类中;从而使具体的测试用例变成简单的调用和验证操作 。
备注:
PageObjects与Page Objects是不一样的 , PageObjects用于指采用Page Objects进行封装的一种设计模式 。
页面 --- 封装成一个类 类=属性+方法
元素 --- 把每个页面元素封装成页面类的属性
操作 --- 把对元素的操作封装成方法(动作 , 行为 , 方法)
PageObjects 设计模式代码实现:
一般情况下 , 对于一个page Objects对象 , 它有两个方面的特性:
.自身元素(WebElement)
.实现功能功能(services)
自身元素很好理解 , 就存在的页面元素 。 而 Page Objects 通常也都是实现一定的功能的 。 就测试开发人员来说 , 更关心的是PageObjects它们实现了什么交互功能更 , 而不是其内部的实现 , 因此 , 这里的功能与开发人员理解的功能是不一样的 。
代码详见如下:
import os, timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.service import Servicefrom common.base_page import BasePagefrom common.element_data_utils import ElementDataUtilselements = ElementDataUtils('login_page').get_element_info()class LoginPage(BasePage): def __init__(self,driver): #元素识别分离 super().__init__(driver) #初始化父类构建函授 self.username_inputbox = elements['username_inputbox'] self.password_inputbox = elements['password_inputbox'] self.login_button = elements['login_button'] self.keepLogin_checkbox = elements['keepLogin_checkbox'] def input_username(self,name): # self.username_inputbox.send_keys(name) self.send_keys(self.username_inputbox,name) def input_password(self,password): self.send_keys(self.password_inputbox,password) def click_login(self): self.click(self.login_button) def click_keelogin(self): self.click(self.keepLogin_checkbox)
设计经验:
public 方法代表页面类能提供的功能尽量不要暴露页面类的内部细节不要在其中加入断言 , 而应该由unittest进行处理 。 PageObjects只是返回需要验证的信息即可
【PageObjects 设计模式,pageobject设计原理】Page Objects 不用代表整个页面 , 可以是任意一个部分 一样的操作 , 不同的结果应该分开(比如正确登录 , 错误登录)
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
