【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())