【base_page+config+utils】接口测试的封装

 

base_page.py

# 对底层selenium的一个封装
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.select import Select
from selenium.webdriver import ActionChains
from base.utils import DriverTools


class BasePage:
    //初始化一个driver
    def __init__(self):
        self.driver = DriverTools.get_driver()
    
    //使用get请求
    def get(self, url):
        self.driver.get(url)
    
    
    def get_element(self, by, elename):
        return WebDriverWait(self.driver, 10, 1).until(lambda x: x.find_element(by, elename))

    def get_elements(self, by, elename):
        return WebDriverWait(self.driver, 10, 1).until(lambda x: x.find_elements(by, elename))
    
    //在页面点击
    def element_click(self, by, elename):  # 点击
        self.get_element(by, elename).click()
    
    
    def elements_click(self, by, elename, num):
        element = self.get_elements(by, elename)
        element[num].click()

    def element_send_keys(self, by, elename, keys):
        self.get_element(by, elename).send_keys(keys)

    def get_element_text(self, by, elename):
        return self.get_element(by, elename).text

    def get_driver_title(self):
        return self.driver.title

    def switch_to_frame(self, by, elename):
        self.driver.switch_to.frame(self.get_element(by, elename))

    def switch_default(self):
        self.driver.switch_to.default_content()

    def switch_to_default(self):
        self.driver.switch_to.default_content()

    def select_by_index(self, by, elename, index):
        Select(self.get_element(by, elename)).select_by_index(index)

    def move_to_element(self, by, elename):  # 悬停
        action = ActionChains(self.driver)
        action.move_to_element(self.get_element(by, elename))
        action.perform()

    def handoff_window_last(self, index):  # 切换窗口
        handles = self.driver.window_handles
        self.driver.switch_to.window(handles[index])

    def dispose_js_window(self, name):  # 操作js弹窗
        alert = self.driver.switch_to.alert
        if name == "确定":
            alert.accept()
        elif name == "取消":
            alert.dismiss()
        else:
            pass

 

 

config.py

import os


BASE_DIR = os.path.dirname(__file__)


if __name__ == '__main__':
    print('---项目路径:', BASE_DIR)

 

 

utils.py

from selenium import webdriver
import json

import config


class DriverTools:
    __driver = None  # 定义了一个类属性, 名字叫__driver, 值为None

    @classmethod
    def get_driver(cls):  # 定义了一个类方法get_driver, 这个方法不需要对象, 直接可以通过类名调用
        if cls.__driver is None:  # 如果类属性__driver的值为None, 条件成立
            cls.__driver = webdriver.Chrome()  # 打开一个浏览器
            cls.__driver.maximize_window()

        return cls.__driver  # 不论if的条件成立与否, 这里总是返回这个类属性__driver

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


class ReadUtil:

    # 定义读取数据文件的方法
    @classmethod
    def read_data(cls, file_path):
        # 读取json文件
        with open(file_path, "r", encoding="utf-8") as f:
            data = json.load(f)
        # 定义空列表
        list_data = []
        # 变量data
        for item in data:
            temp = tuple(item.values())
            # 把转化后的数据添加到列表中
            list_data.append(temp)
        return list_data


class DataTools:
    @classmethod
    def get_login_data(cls):  # 从json文件中把测试数据和预期结果读取到一个列表中
        file = open(r"文件绝对的路径", "r", encoding="utf-8")
        dict1 = json.load(file)  # 把json文件的内容读取到字典变量dict1中
        file.close()
        list1 = []  # 定义了一个空列表
        for n in dict1:  # 遍历字典
            list1.append((dict1[n]["keys"], dict1[n]["keys"], dict1[n]["keys"], dict1[n]["keys"]))
        return list1


if __name__ == '__main__':
    print('----:', DataTools.get_login_data())

 

posted @ 2022-07-15 11:40  淫鬻  阅读(16)  评论(0编辑  收藏  举报