自动化笔记 po设计模型

1.创建驱动类文件夹 

driver>driver_manager.py

from selenium import webdriver

class DriverManager():

    def __init__(self, name='chrome'):
        if name == 'chrome':
            self.d = webdriver.Chrome()
        elif name == 'firefox':
            self.d = webdriver.Firefox()

#初始化driver对象   比较简单的封装,可以写的更复杂些,比如加入浏览器配置,可以抓取浏览器日志这种
driver = DriverManager().d

if __name__=='__main__':
    pytest.main()

2.创建基本页面类文件夹

pages>base_pages.py

#基本页面,首页,登录页,注册页,等一些基本页面
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

from driver.driver_manager import driver
class BasePage():

    #打开指定URL的网页
    def open(self,url):
        driver.get(url)

    #封装定位元素
    def find_element(self,type,value):
        if type == "id":
            el = driver.find_element(By.ID, value)
        elif type == "name":
            el = driver.find_element(By.NAME, value)
        elif type == "tag":
            el = driver.find_element(By.TAG_NAME, value)
        elif type == "class":
            el = driver.find_element(By.CLASS_NAME, value)
        elif type == "link":
            el = driver.find_element(By.LINK_TEXT, value)
        elif type == "plink":
            el = driver.find_element(By.PARTIAL_LINK_TEXT, value)
        elif type == "xpath":
            el = driver.find_element(By.XPATH, value)
        elif type == "css":
            el = driver.find_element(By.CSS_SELECTOR, value)
        else:
            print("输入的定位方式错误")
        return el

    #点击元素封装
    def click_element(self,type,value):
        self.find_element(type,value).click()

    #向目标元素输入文本
    def input_data(self,type,value,text):
        self.find_element(type,value).send_keys(text)

    #鼠标移动到定位元素后悬停
    def move_mouse_to_element(self,type,value):
        ActionChains(driver).move_to_element(self.find_element(type,value)).pause(2).perform()

    #切换框架
    def switch_to_frame(self,id_name_or_element):
        driver.switch_to.frame(id_name_or_element)
    #切换窗口
    def switch_to_windows(self,title):
        handles = driver.window_handles
        for handle in handles:
            driver.switch_to.window(handle)
            if driver.title == title:
                break

pages>login_page.py

class LoginPage():
    pass

pages>main_pages.py

from pages.base_pages import BasePage
from pages.reg_page import RegPage
from pages.login_page import LoginPage

class MainPage(BasePage):


    # 主页地址,根据自己的测试需求封装自己需要的页面 ,一般来说数据量大了,url地址写在代码中是不合适的,可以写在外部配置文件中用代码调用
    url = 'http://192.168.239.128/opencart/'

    会员中心 = {'type': 'link', 'value': '会员中心'}  #为了方便查看,中文书写,项目中还是用英文的好
    会员注册 = {'type': 'link', 'value': '会员注册'}
    会员登录 = {'type': 'link', 'value': '会员登录'}
    搜索框 = {'type': 'name', 'value': 'search'}
    搜索按钮 = {'type': 'xpath', 'value': '//*[@id="search"]/button/i'}


    def open_main_page(self):
        self.open(self.url)

    def go_to_reg(self):
        self.move_mouse_to_element(self.会员中心['type'],self.会员中心['value'])
        self.click_element(self.会员注册['type'],self.会员注册['value'])
        return RegPage()  #封装的函数会跳转到某一个其他已封装的页面类中,需要return到那个对应页面类对象

    def go_to_login(self):
        self.move_mouse_to_element(self.会员中心['type'], self.会员中心['value'])
        self.click_element(self.会员登录['type'], self.会员登录['value'])
        return LoginPage()

    def search(self):
        self.input_data(self.搜索框['type',self.搜索框['value']])
        self.click_element(self.搜索框['type'],self.搜索框['value'])

pages>reg_page.py

class RegPage():
    pass

3.测试用例文件夹

testcases>test_opentcart_demo.py

import pytest
from pages.main_page import MainPage

class TestOpencartDemo():


    def test_01_reg(self):
        main_page = MainPage() #初始化一个页面的对象
        main_page.open_main_page() #调用封装好的函数直接跳转到主页
        main_page.go_to_reg()  #点击进入注册页面

    def test_02_login(self):
        main_page = MainPage()
        main_page.open_main_page()
        main_page.go_to_login()


if __name__=='__main__':
    pytest.main()

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值