UI自动化PO模式

# 定义一个工具类
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

class UtilsDriver:
    __driver = None
    @classmethod
    def get_driver(cls):
        if cls.__driver is None:
            cls.__driver = webdriver.Chrome()
            cls.__driver.maximize_window()
            cls.__driver.implicitly_wait(10)
            cls.__driver.get("http://www.tpshop.com/")
        return cls.__driver

    @classmethod
    def quit_driver(cls):
        if cls.__driver is not None:
            cls.get_driver().quit()


def get_msg():
    sleep(3)
    return UtilsDriver.get_driver().find_element(By.CSS_SELECTOR,".layui-layer-content").text


# import json
# file = open(r"D:\dcs\dcs12\PO_01\V7\case_data\login_case_data.json","r",encoding="utf-8")
# data = json.load(file)          # 把json文件的内容转化为字典格式
# print(data)
# for i in data:
#     print(i,data[i])


def case_data(filename):
    with open(filename, encoding="utf-8") as f:
        case_data = json.load(f)
    list_case_data = []
    for case in case_data.values():
        list_case_data.append(tuple(case.values()))
    return list_case_data
# 定义对象库层==》基类==》父类
from selenium.webdriver.support.wait import WebDriverWait
from V7.utils import UtilsDriver

# 定位元素
class BasePage:
    def __init__(self):
        self.driver = UtilsDriver.get_driver()

    def get_element(self,location):
        wait = WebDriverWait(self.driver,10,1)          # 显示等待
        element = wait.until(lambda x: x.find_element(*location))
        return element

# 定义操作层
class BaseHandle:
    def input_text(self,element,text):
        element.clear()
        element.send_keys(text)


{
  "user_no_exist": {
    "username":"17789087654",
    "password": "123456",
    "code": "8888",
    "expect": "账号不存在"
},
"password_error":{
  "username":"15708460952",
    "password": "1234567",
    "code": "8888",
    "expect": "密码错误"
},
  "username_is_none": {
    "username": "",
    "password": "123456",
    "code": "8888",
    "expect": "用户名不能为空"
  }
}
# 表示首页页面对象
from selenium.webdriver.common.by import By
from V7.base.base_page import BasePage,BaseHandle


# 对象库存     ==》定位元素
class PageHome(BasePage):
    def __init__(self):
        super().__init__()            # 重写
        self.login_btn = By.CSS_SELECTOR,".red"
    def find_login_btn(self):
        return self.get_element(self.login_btn)     # 通过显示等待 获取按钮元素

# 操作层     ==》元素的操作
class HandleHome(BaseHandle):
    def __init__(self):
        self.home_page = PageHome()
    def click_login_bin(self):
        self.home_page.find_login_btn().click()


# 业务层   ==》把多个功能结合到一起操作
class HomeProxy:
    def __init__(self):
        self.home_handle = HandleHome()
    def go_login_page(self):
        self.home_handle.click_login_bin()
# 定义测试类
from V7.utils import UtilsDriver,get_msg,case_data
from V7.page.page_home import HomeProxy
from V7.page.page_login import LoginProxy
import pytest
login_case_data = case_data(r"./V7\case_data\login_case_data.json")

class TestLogin:
    def setup_class(self):
        self.home_prxoy = HomeProxy()
        self.login_prxoy = LoginProxy()
        self.home_prxoy.go_login_page()       # 点击登录

    def setup(self):
        UtilsDriver.get_driver().refresh()   # 刷新

    def teardown_class(self):
        UtilsDriver.quit_driver()

    @pytest.mark.parametrize("username,password,code,expect",login_case_data)
    def test_login_001(self,username,password,code,expect):
        self.login_prxoy.login(username,password,code)
        msg = get_msg()
        assert expect in msg
[pytest]
addopts = -s -v --html=report/report.html
testpaths = ./V6/scripts
python_files = test_login_*.py
python_classes = Test*
python_functions = test_*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值