web自动化(七)POM设计模式

POM设计模式,即Page Object Model。UII自动化测试中,POM模式是一种设计思路,把每个页面当成一个对象。

POM模式的优点:

提供了页面元素操作和业务流程相分离的模式,使测试的代码结构比之前更加清晰,可读性强。

方便复用对象和方法,提高了代码的复用性

POM设计模式 四层架构:

1层:basepage 层 每个页面的相同的属性和方法

2层:pageobject 针对每个页面定义页面类 每个页面独有的属性和方法

3层:testcase层 用例层 处理业务逻辑

4层:testdata数据层

basepage 层

bash 复制代码
from demo.pagebase.page_base_drission import PageBaseDrission
from demo.pagebase.page_base_selenium import PageBaseSelenium


class PageBase(PageBaseSelenium,PageBaseDrission):
    def __init__(self, web_driver,web_page):
        self.web_driver = web_driver
        self.web_page=web_page```

```bash
from  DrissionPage import  WebPage


class PageBaseDrission:
    def __init__(self,web_page):
        self.web_page=web_page
    def input_d(self,loc,value):
        loc_sel=self.finde_ele_d(loc)
        loc_sel.clear()
        loc_sel.input(value)

    def click_d(self,loc):
        self.finde_ele_d(loc).click()
    def finde_ele_d(self,loc,timeout=10):
        self.web_page.wait.eles_loaded(loc)
        return self.web_page.ele(loc)
bash 复制代码
from  selenium import  webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class PageBaseSelenium:
    def __init__(self,web_driver):
        self.web_driver=web_driver
    def input(self,loc,value):
        self.finde_ele(loc).send_keys(value)

    def click(self,loc):
        self.finde_ele(loc).click()
    def finde_ele(self,loc,timeout=10):
        WebDriverWait(self.web_driver,timeout=timeout).until(EC.presence_of_element_located(loc))
        return self.web_driver.find_element(*loc)

pageobject

bash 复制代码
import time

from demo.pagebase.page_base import PageBase
from  DrissionPage.common import By as DBy
from selenium.webdriver.common.by import  By
class LoginPage(PageBase):
    url = "https://passport.jd.com/new/login.aspx"
    def login(self,loginname,password):
        self.web_driver.get(LoginPage.url)
        self.web_page.get(LoginPage.url)
        el = (By.ID, "loginname")
        self.input(el,loginname)

        el = (By.ID, "nloginpwd")
        self.input(el,password)

        el = (By.ID, "loginsubmit")
        self.click(el)
        time.sleep(15)

        el = (DBy.ID, "loginname")
        self.input_d(el, loginname)

        el = (DBy.ID, "nloginpwd")
        self.input_d(el, password)

        el = (DBy.ID, "loginsubmit")
        self.click_d(el)
        time.sleep(15)

testcase 层

bash 复制代码
import  unittest

import BeautifulReport
from  selenium import  webdriver
from demo.pageobject.login_page import LoginPage
from DrissionPage import WebPage

class TestLogin(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.web_driver = webdriver.Firefox()
        cls.web_page=WebPage("d")
    @classmethod
    def tearDownClass(cls):
        cls.web_driver.quit()
        cls.web_page.quit()
    def test_login(self):
        login_name = "用户名"
        pwd = "密码"
        LoginPage(self.web_driver,self.web_page).login(loginname=login_name,password=pwd)
if __name__ == '__main__':

    case = unittest.TestLoader().loadTestsFromTestCase(TestLogin)

    BeautifulReport.BeautifulReport(case).report(description="测试报告",filename="report")
相关推荐
小羊Yveesss9 小时前
从自动化到自主协同:2026年AIOps 2.0赋能DevOps的变革之路
大数据·自动化·devops
一只专注api接口开发的技术猿16 小时前
京东商品实时监控选品实战:用 Open Claw API 快速搭建自动化工具
运维·数据库·自动化
deephub16 小时前
用 Playwright 和 LLM 实现自愈测试自动化
人工智能·深度学习·自动化·大语言模型·playwright
fundroid17 小时前
分享几个 Claude Code 自动化开发的 Skill
ai·自动化·agent·skill
米高梅狮子17 小时前
11.Quota and Limits、健康检查和认证与授权
云原生·容器·架构·kubernetes·自动化
众创岛18 小时前
web自动化中的日志模块
java·前端·自动化
aichitang202419 小时前
AI Agent 终端与系统级自动化深度指南
运维·人工智能·自动化
米高梅狮子20 小时前
13.ETCD 存储系统、生产环境 Kubernetes 集群部署和Kubernetes 集群升级
数据库·云原生·容器·架构·kubernetes·自动化·etcd
Land03291 天前
RPA工具选型技术指南:架构差异与实测数据
python·自动化·rpa
志栋智能1 天前
告别报告堆砌:超自动化巡检的智能分析与洞察
运维·服务器·网络·人工智能·自动化