一、PO模式的思想
- 原理:
1. 将页面的元素定位和元素行为封装成一个page类
2. 类的属性:元素的定位
3. 类的行为:元素的操作 - 页面对象和测试用例分离
- 测试用例:
- 调用所需要页面对象中的行为,组成测试用例
- 测试用例中,只需要含有页面函数的调用和断言,不应该出现元素定位等其他的操作,如果写测试用例中出现需要其他的额外的操作,可以想办法封装到页面对象或者元素定位中
- 好处:
- 当某个页面的元素发生变化,只需要修改该页面对象中的代码即可,测试用例不需要修改
- 提高代码的重用率,结构清晰,维护代码容易
- 测试用例发生变化时,不需要或者只需要修改少数页面对象代码即可
二、使用unittest框架实现PO模式
- 新建一个包,命名为PageObjects,包中用来封装各个页面的功能
页面对象封装的类中,函数用来实现页面的功能,在类的初始化函数中,使用传参(driver)的方式完成,页面只需要实现对应功能即可,具体传入什么样的测试,在测试用例的前置条件中实现,可以提高函数的重用率
页面对象封装函数:login_page.py
#_-*- coding:utf-8 -*-
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
class LoginPage:
def __init__(self,driver):
self.driver = driver
#登录
def login(self,username,passwd):
#输入用户名
#输入密码
#点击登录
name_text="username"
password_text="password"
login_buttom="loginBtn"
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located((By.ID,name_text)))
self.driver.find_element_by_id(name_text).send_keys(username)
self.driver.find_element_by_id(password_text).send_keys(passwd)
self.driver.find_element_by_id(login_buttom).click()
#注册
def register(self):
register_button = "//form[@id='login_form']//p[@class='have']/a"
self.driver.find_element_by_xp