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")
相关推荐
GlobalSign数字证书10 小时前
小企业零运维 TLS 架构设计:证书生命周期管理(CLM)与自动化轮换策略的技术选型
运维·自动化
Nomarsgo12 小时前
机器视觉+六轴机械臂智能制造解决方案——基于联控Lionconit RMC-610构建视觉计算与机器人协同控制平台
科技·机器人·自动化·汽车·电脑·制造
小新讲网安13 小时前
云安全攻防实战:AWS与阿里云渗透测试全流程指南
安全·web安全·网络安全·阿里云·自动化·云计算·aws
纳米软件14 小时前
AIDC供电架构演进_从传统UPS到HVDC的测试挑战与验证方法
自动化·ate测试系统·aidc·服务器电源·电子测试测量
xiaoxiangsiyan15 小时前
RHCE2026云原生路线EX188和EX288完整备考指南
运维·网络·云原生·自动化
yinshuzhineng16 小时前
如何提升生产线自动化水平,降低人工成本?
运维·人工智能·自动化·制造
wechatbot88817 小时前
极客互动企业微信 SCRM 私域运营实战效果全景
大数据·汇编·微信·自动化·企业微信·rpa
weixin_4038101320 小时前
苹果群控带机量实测:一台电脑能稳定控多少台iPhone
自动化·iphone·跨境电商·苹果投屏·多媒体运营·安卓中控
Dream-Y.ocean20 小时前
具身智能落地实战:数字人驱动的全自动化舆情监控系统
运维·自动化
weixin_4038101320 小时前
iOS自动化脚本怎么避免风控?无屏幕镜像截图原理详解
ios·自动化·跨境电商·苹果群控·苹果投屏·多媒体运营