笔记2 --设计模式(封装)

二、设计模式(封装)

1、POM 模式 + 关键字驱动

POM: Page object Model, 页面对象模式
好处:
解决线性脚本的问题
解决代码不能重复利用的问题
解决代码后期的维护问题
分三层:
基础层:base,主要放selenium原生的方法
页面对象层:PO 主要用于放页面元素和页面动作
测试用例层:存放测试用例和测试数据
逻辑:页面对象调用基层方法,测试用例层调用页面对象层

2、分层结构

分层思想:主要是将不同功能代码分别放到不同的文件夹中,易于去除冗余代码和后期维护

3、分层代码

basepage.py

from selenium import webdriver
from selenium.webdriver.support.select import Select

class BasePage():
    def __init__(self):
        global  driver
        #打开chrome 浏览器
        self.driver = webdriver.Chrome()
        # self.driver = webdriver.Firefox()

        #将打开的浏览器最大化窗口
        self.driver.maximize_window()

        #打开local部署的帝国软件页面
        self.driver.execute('get',{'url':'http://localhost/'})

    #定位元素关键字,
    def locator_element(self,loc):
        #find_element有2个参数,loc前的* 作用是将元组解包
        return self.driver.find_element(*loc)

    #设置值的关键字
    def send_keys(self,loc,value):
        self.locator_element(loc).send_keys(value)

    #配置点击操作
    def click(self,loc):
        self.locator_element(loc).click()

    #进入框架
    def goto_frame(self,frame_name):
        self.driver.switch_to.frame(frame_name)

    #退出框架
    def exit_frame(self):
        self.driver.switch_to.default_content()

    #选择下拉框
    def select_dopdownlist(self,loc,value):
        #Select 需要导 buildin 包 from selenium.webdriver.support.select import Select
        sel = Select(self.locator_element(loc))
        sel.select_by_value(value)

loginpage.py

#导包
from basepage import BasePage
from selenium.webdriver.common.by import By

class LoginPage(BasePage):
    #定位页面元素
    username_loc = (By.NAME, "username")
    password_loc = (By.NAME, "password")
    submit_loc =(By.XPATH, "//form/input[5]")

    #页面操作,继承basepage的类
    def login_empire(self,username="逆流的鱼",password="123456"):
        self.send_keys(LoginPage.username_loc,username)
        self.send_keys(LoginPage.password_loc,password)
        self.click(LoginPage.submit_loc)

test_case.py

import pytest
from loginpage import LoginPage
class TestCase():
    def test_01_login(self):
        lp = LoginPage()
        lp.login_empire()
posted @ 2023-08-25 08:38  逆流的鱼2016  阅读(21)  评论(0编辑  收藏  举报