乌鲁木齐市网站建设_网站建设公司_留言板_seo优化
2025/12/23 13:05:11 网站建设 项目流程

介绍

PO是Page Object(⻚⾯对象),将⾃动化涉及的⻚⾯或模块封装成对象,是一种思想。

解决的问题:

  1. 解决代码冗余
  2. 便于维护(脚本层与业务分离)-- 如果元素信息发⽣变化了,也不⽤去修改脚本。

非PO代码实现

# 非po模式实现登录
import timefrom selenium import webdriver
from selenium.webdriver.common.by import Byclass TestLogin:def setup_class(self):self.driver = webdriver.Chrome()self.driver.maximize_window()self.driver.get("http://127.0.0.1/Home/user/login.html")self.driver.implicitly_wait(10)def teardown_class(self):time.sleep(4)self.driver.quit()def test_login(self):# 在用户名输入框中输入13600000001# driver.find_element(By.ID,"username").send_keys("13600000001")self.driver.find_element(By.XPATH, "//*[contains(@placeholder,'手机号')]").send_keys("13600000001")# 在密码输入框输入123456# driver.find_element(By.ID,"password").send_keys("123456")self.driver.find_element(By.XPATH, "//*[contains(@placeholder,'密码')]").send_keys("123456")# 在验证码输入框输入8888# driver.find_element(By.ID,"verify_code").send_keys("8888")self.driver.find_element(By.XPATH, "//*[contains(@placeholder,'验证')]").send_keys("8888")# 点击登录按钮self.driver.find_element(By.XPATH, "//*[@name='sbtbutton']").click()

PO设计

以登录为例介绍PO模式,其中

  1. base: 存放所有Page页面公共方法
  2. page: 将页面封装为对象
  3. script: 测试脚本

image-20251223125210458

base

base.py:分析要实现页面公共方法

'''存放所有page页面的公共方法
'''
from selenium.webdriver.support.wait import WebDriverWaitclass Base:def __init__(self,driver):self.driver = driver# 查找元素def base_find(self, loc, timeout = 10, poll_frequency = 0.5):# 采用显示等待的方法获取元素# 显示等待 -> 查找元素  loc = (By.ID,"userA")  *loc=loc[0],loc[1]el = WebDriverWait(self.driver,timeout,poll_frequency).until(lambda x:x.find_element(loc[0],loc[1]))return el# 输入方法def base_input(self,loc,value):# 1.获取元素el = self.base_find(loc)# 2.清空el.clear()# 3.输入el.send_keys(value)# 点击方法def base_click(self,loc):# 先找到元素再点击self.base_find(loc).click()# 获取元素文本方法def base_get_text(self,loc):# 先找到元素再获取return self.base_find(loc).text

page

page_login.py:

'''
模块名:page_模块单词
类名;大驼峰形式,去掉下划线和数字
方法:自动化测试中要用到哪些元素就封装哪些方法
'''
from selenium.webdriver.common.by import Byfrom base.base import Base# 配置信息
username = (By.XPATH, "//*[contains(@placeholder,'手机号')]")pwd = (By.XPATH,"//*[contains(@placeholder,'密码')]")code = (By.XPATH,"//*[contains(@placeholder,'验证')]")login_btn = (By.XPATH,"//*[@name='sbtbutton']")nickname = (By.CSS_SELECTOR,".userinfo")class PageLogin(Base):# 输入用户名def page_username_input(self,value):self.base_input(username,value)# 输入密码def page_pwd_input(self,value):self.base_input(pwd,value)# 输入验证码def page_code_input(self,value):self.base_input(code,value)# 点击登录def page_clink_button(self):self.base_click(login_btn)# 获取昵称def page_nickname(self):self.base_get_text(nickname)# 为了测试业务的时候方便,需要有组合业务def page_test_login(self,phone,password,code2):self.page_username_input(phone)self.page_pwd_input(password)self.page_code_input(code2)self.page_clink_button()

script

test01_login.py:

import timefrom selenium import webdriverfrom page.page_login import PageLoginclass TestLogin:def setup_class(self):self.driver = webdriver.Chrome()self.driver.maximize_window()self.driver.get("http://127.0.0.1/Home/user/login.html")self.login = PageLogin(self.driver)def teardown_class(self):self.driver.quit()def test01_login(self,phone="13600000001",password="123456",code2="8888"):# 调用page_login里面的page_test_login方法来进行测试self.login.page_test_login(phone,password,code2)# 断言nickname = self.login.page_nickname()print("nickname:", nickname)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询