2024年5月28日 Web自动化po模式学习

PO模式学习

1 po模式

V1:不采用任何模式,线性模型
V2:采用unittest框架
V3:业务代码和页面对象进行
V4:实际中po模式书写
V5:
V6:

2.2 案例

V1: 无法批量运行

test_login_username_not_exit.py

import unittest
from selenium import webdriver

driver=webdriver.Firefox()
driver.maxmize_window()
diiver.implicitily_wait(30)

url="http://baidu.com"
driver.get(url)
#点击登录
driver.find_element_by_partial_link_text("登录").click()
#输入用户名
driver.find_element_by_css_selector("#username").send_keys("13811112222")
#输入密码
driver.find_element_by_css_selector("#password").send_keys("123456")
#输入验证码
driver.find_element_by_css_selector("#verify_code").send_keys("888888")
#点击登录按钮
driver.find_element_by_css_selector(".J-login-submit").click()
#输出提示信息
msg=driver.find_element_by_css_selector(".layui-layer-content").text
#断言
assert msg=="用户名不存在!"
#点击确定按钮
driver.find_element_by_css_selector(".layui=layer-btn0").click()
#关闭
driver.quit()

test_login_password_error.py

import unittest
from selenium import webdriver

driver=webdriver.Firefox()
driver.maxmize_window()
diiver.implicitily_wait(30)

url="http://baidu.com"
driver.get(url)
#点击登录
driver.find_element_by_partial_link_text("登录").click()
#输入用户名
driver.find_element_by_css_selector("#username").send_keys("13800001111")
#输入密码
driver.find_element_by_css_selector("#password").send_keys("123123")
#输入验证码
driver.find_element_by_css_selector("#verify_code").send_keys("888888")
#点击登录按钮
driver.find_element_by_css_selector(".J-login-submit").click()
#输出提示信息
msg=driver.find_element_by_css_selector(".layui-layer-content").text
#断言
assert msg=="密码错误!"
#点击确定按钮
driver.find_element_by_css_selector(".layui=layer-btn0").click()
#关闭
driver.quit()

V2 使用unittest

test_login.py

问题:业务脚本与页面对象没有分开(代码冗余)

#导包
import unittest
from selenium import webdriver 

#新建测试类
class Test_login(unittest.TestCase):
	#初始化
    def setUp(self):
        self.driver=driver
        driver=webdriver.Firefox()
        driver.maxmize_window()
        driver.implicitily_wait(30)
        driver.get("http://xxxx")
        driver.find_element_by_partial_link_text("登录").click()
   
	#结束tearDown
    def tearDown(self):
        self.driver.quit()
    
    #新建测试类方法 用户名不存在
    def test_login_usename_not_exit(self):
        pass
    
    #新建测试类方法 密码错误
    def test_login_password_error(self):
        pass    

V3 页面代码和页面对象进行

PO: page object(页面对象)
把一个页面封装为class:

项目文件夹pagescripts

**V4 **

项目文件夹base, pagescripts

base文件夹

base.py

from selenium.webdriver.support.wait import WebDriverWait

class Base:  # page页面一些公共的方法
    # 初始化方法
    def __init__(self):
        # self.driver =driver
        #临时代替driver
        self.driver=webdriver.FireFox()
        self.driver.maxmize_window()
        self.driver.get("http://localhost")
    
    # 查找元素方法(提供点击、输入)
    def base_find_element(self,loc,timeout=30,poll=0.5):
        return WebDriverWait(self.driver,timeout=timeout,poll_frequency=poll ).until(lambda x: x.find_element(*loc))  #显式等待  导包    *loc为解包
    
    # 点击方法
    def base_click(self,loc):
        self.base_find_element(loc).click()
    
    # 输入方法
    def base_input(self,loc,value):
        el=self.find_element(loc)
        el.clear()
        el.send_keys(value)
    
    # 获取文本方法
    def base_get_text(self,loc):
        return self.find_element(loc).text
    
    #截图方法
    def base_get_image(self):
        self.driver.get_screenshot_as_file("../image/{}.png".format(time.strftime("%Y_%m_%d %H_%M_%S")))

注意:

1. 扩展:loc类型为元组    *loc
2.注意:
	base基类方法封装时,解包主要要一次,在查找元素中解包
	driver为虚拟,谁调用base是,谁传入,无需关注从哪里来
	loc真正使用loc的方法

pagesfile

__init__.py文件

from selenium.webdriver.common.by import By

'''以下信息为登录页面元素配置信息,临时存放地'''
#登录链接
login_link=By.PARTITAL_LINK_TEXT,"登录"
#用户名
login_username=By.ID,"username"
#密码
login_pwd=By.ID,"verify_code"
#验证码
login_btn=By.CSS_SELECTOR,".J-login-submit"
#获取异常文本
login_err_info=By.CSS_SELECTOR,".layui-layer-content"
#点击异常文本 按钮
login_err_btn_ok=By.CSS_SELECTOR,".layui-layer-btn0"

'''以下为订单页面配置数据'''


'''以下为支付页面配置数据'''

page_login.py

from V4 import page

class PageLogin(Base):
    
    #点击登录链接
    def page_click_login_link(self):
        self.base_click(page.login_link)
    
    #输入用户名
    def page_input_username(self,username ):
        self.base_input_username(page.login_username,username)
    
    #使用密码
    def page_input_password(self,pwd):
        self.base_input_pwd(page.login_pwd,pwd)
    
    #输入验证码
    def page_input_verify_code(self,code):
        self.base_input_verify_code(page.login_verify_code,code)
    
    #点击登录按钮
    def page_click_login_btn(self):
        self.base.click(page.login_btn)
    
    #获取异常信息
    def page_get_error_info(self):
        return self.base.get_error_info(page.login_err_info)
    
    #点击异常信息框 确定
    def page_click_error_btn_ok(self):
        self.base_click(page.login_err_btn_ok)
    
    #截图
    def page_get_screenshot(self):
        self.base_get_image()
    
    # 组装
    def page_login(self,username,pwd,code):
        self.page_input_username(username)
        self.page_input_pwd(pwd)
        self.page_input_verify_code(code)
        self.page_click_login_btn()

scripts文件夹

test_login.py

#导包
import unittest
from V4.page.page_login import PageLogin
from parameterized import parameterized

def get_data(self):
    return [("13822223333","123456","8888","账号不存在!"), ("13800001111","123123","8888","账号错误!"),("13800001111","123456","6666","验证码错误!")]

#新建测试类并继承
class TestLogin(unittest.TestCase):
    login = None
    #setup
    def setUp(self):
        #实例化 获取页面对象PageLogin
        self.login=PageLogin()
        #点击登录链接
        self.login.page_click_login_link()
        
    #setupclass
    @classmethod
    def setUpClass(cls):
        cls.login=PageLogin()
        #点击登录链接
        cls.login.page_click_login_link()
    
    #tearDown
    def tearDown(self):
        #关闭驱动对象
        self.login.driver.quit()
    
    #tearDownclass
    @classmethod
    def tearDownClass(cls):
        #关闭驱动对象
        cls.login.driver.quit()
    
    #登录测试方法
    @parameterized.expend(get_data())
    def test_login(self,username,pwd,code,expect_result):
        #调用登录方法
        self.login.page_login(username,pwd,code)
        #获取登录信息
        msg=self.login.page_get_error_info()
        #断言
        try:
        	self.assertEqual(msg,expect_result) 
        #截图
    	except AssertionError:
        	self.login.page_get_image()

在这里插入图片描述
ps: 猫猫能有什么想法呢
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值