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")
相关推荐
金智维科技官方7 天前
智能体,重构企业自动化未来
人工智能·自动化·agent·智能体·数字员工
梦想的旅途27 天前
企业微信API:外部群自动化推送实战指南
大数据·机器人·自动化·企业微信·rpa
xiaoginshuo7 天前
流程自动化从传统RPA升级到AI Agent,如何匹配合适的自动化方案
人工智能·自动化·rpa
W-琑7 天前
软件测试-自动化测试
功能测试·自动化
牛奶咖啡137 天前
DevOps自动化运维实践_使用再生龙对Linux系统进行备份还原
运维·自动化·devops·linux系统的备份还原·linux系统克隆备份·再生龙
Youngchatgpt7 天前
如何在 Excel 中使用 ChatGPT:自动化任务和编写公式
人工智能·chatgpt·自动化·excel
GAOJ_K7 天前
同步带模组稳定运行的关键
人工智能·科技·自动化·制造
电化学仪器白超7 天前
EC20CEHDLG-128-SNNS调试记录
python·单片机·嵌入式硬件·自动化
xixi09247 天前
selenium IDE——command
selenium·测试工具
志栋智能7 天前
安全超自动化:从被动防御到主动响应的革命
运维·网络·数据库·人工智能·安全·web安全·自动化