笔记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()
***************用努力照亮现实的梦!***********************
本文来自博客园,作者:逆流的鱼2016,转载请注明原文链接:https://www.cnblogs.com/orange2016/p/17655949.html