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

POM设计模式,即Page Object Model。UII自动化测试中,POM模式是一种设计思路,把每个页面当成一个对象。
POM模式的优点:
提供了页面元素操作和业务流程相分离的模式,使测试的代码结构比之前更加清晰,可读性强。
方便复用对象和方法,提高了代码的复用性

POM设计模式 四层架构:
1层:basepage 层 每个页面的相同的属性和方法
2层:pageobject 针对每个页面定义页面类 每个页面独有的属性和方法
3层:testcase层 用例层 处理业务逻辑
4层:testdata数据层

basepage 层

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)
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

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 层

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")

相关推荐

  1. web自动化POM设计模式

    2024-07-16 15:44:02       20 阅读
  2. Web自动化-PO模式

    2024-07-16 15:44:02       29 阅读
  3. 设计模式(策略模式)

    2024-07-16 15:44:02       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 15:44:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 15:44:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 15:44:02       58 阅读
  4. Python语言-面向对象

    2024-07-16 15:44:02       69 阅读

热门阅读

  1. 移动端 图片优化

    2024-07-16 15:44:02       16 阅读
  2. Python中的random模块及相关模块详解

    2024-07-16 15:44:02       21 阅读
  3. 算力是什么?人工智能需要用到算力吗

    2024-07-16 15:44:02       23 阅读
  4. Android焦点之FocusWindow切换流程

    2024-07-16 15:44:02       20 阅读