赞
踩
test
pages
basePage.py
基础页面封装
# -*-coding:utf-8-*- import os from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By class BasePage(object): """基础页面""" def __init__(self, driver=None, base_url=None): """ 基础的参数,webdriver、默认访问的url :param driver: 浏览器驱动 :param base_url: 默认打开url,一般都是登录页面 """ if driver is None: current_path = os.path.abspath(os.path.dirname(__file__)) driver_path = current_path + '/../../drivers/chromedriver.exe' self.driver = webdriver.Chrome(driver_path) else: self.driver = driver if base_url is None: self.base_url = 'http://localhost:21248/#/' else: self.base_url = base_url # 设置默认打开的页面 self.open_page() def open_page(self): """打开默认页面""" self.driver.maximize_window() self.driver.implicitly_wait(10) self.driver.get(self.base_url) sleep(1) def close_page(self): """关闭页面""" return self.driver.close() def quit_driver(self): """关闭页面并且退出程序""" return self.driver.quit() def find_element(self, by, element): """返回单个定位元素""" sleep(1) return self.driver.find_element(by, element) def find_elements(self, by, element): """返回一组定位元素""" sleep(1) return self.driver.find_elements(by, element) def switch_alert(self): """返回弹窗页面""" sleep(1) return self.driver.switch_to.alert def select_menu(self, menu_text=None): """菜单选择""" sleep(1) menus_element = self.driver.find_elements(By.CSS_SELECTOR, "#menu>div>h4") for menu in menus_element: # replace(" ", "")去掉字符串中的空格 if menu.text.replace(" ", "") == menu_text.replace(" ", ""): return menu.click() print(menu_text + "未找到") return def log_out(self): """退出登录""" return self.select_menu("退出登录")
test
pages
loginPage.py
登录页面封装
# -*-coding:utf-8-*- import os from selenium.webdriver.common.by import By from test.pages.basePage import BasePage from utils.readConfig import ReadConfig class LoginPage(BasePage): """登录页面""" def email_element(self): """邮箱地址""" return self.find_element(By.CLASS_NAME, "email") def password_element(self): """密码""" return self.find_element(By.CLASS_NAME, "password") def login_button(self): """登录按钮""" return self.find_element(By.CSS_SELECTOR, ".login-btn>input[value='登 录']") def email_error_element(self): """邮箱地址错误""" return self.find_element(By.CSS_SELECTOR, ".email+div.msg") def password_error_element(self): """密码错误""" return self.find_element(By.CSS_SELECTOR, ".password+div.msg") def login_fail_element(self): """登录失败""" return self.switch_alert() def login(self, email=None, password=None): """登录操作""" account_email, account_password = self.get_account() if email is None: email = account_email else: email = email if password is None: password = account_password self.email_element().send_keys(email) self.password_element().send_keys(password) self.login_button().click() @staticmethod def get_account(): """获取默认邮箱地址和密码""" current_path = os.path.abspath(os.path.dirname(__file__)) json_path = current_path + '/../../config/base_data.json' account = ReadConfig().read_json(json_path) return account['email'], account['password'] if __name__ == '__main__': a = LoginPage() a.login() a.quit_driver()
test
pages
homePage.py
主页页面封装
# -*-coding:utf-8-*- from time import sleep from selenium.webdriver.common.by import By from test.pages.loginPage import LoginPage from test.common.tableOperation import TableOperation class HomePage(LoginPage): """主页页面""" # 检索 def search_input_element(self): """检索输入框""" return self.find_element(By.ID, "search-input") def search_button_element(self): """检索按钮""" return self.find_element(By.CLASS_NAME, "search") # 按钮 def add_button_element(self): """新增按钮""" return self.find_element(By.ID, "add") def edit_button_element(self): """编辑按钮""" return self.find_element(By.ID, "edt") def delete_button_element(self): """删除按钮""" return self.find_element(By.ID, "del") # 编辑弹窗 def edit_code_element(self): """学号输入框""" return self.find_element(By.CSS_SELECTOR, "#add-dialog .code") def edit_name_element(self): """姓名输入框""" return self.find_element(By.CSS_SELECTOR, "#add-dialog .name") def edit_sex_element(self): """性别输入框""" return self.find_element(By.CSS_SELECTOR, "#add-dialog .sex") def edit_grader_element(self): """年级输入框""" return self.find_element(By.CSS_SELECTOR, "#add-dialog .grader") def edit_confirm_button_element(self): """编辑确定按钮""" return self.find_element(By.CSS_SELECTOR, "#add-dialog #confirm") def edit_cancel_button_element(self): """编辑取消按钮""" return self.find_element(By.CSS_SELECTOR, "#add-dialog #cancel") # 删除弹窗 def del_confirm_button_element(self): """删除确定按钮""" return self.find_element(By.CSS_SELECTOR, "#del-dialog #confirm") def del_cancel_button_element(self): """删除取消按钮""" return self.find_element(By.CSS_SELECTOR, "#del-dialog #cancel") # 页面操作方法 def search(self, text): """检索操作""" self.search_input_element().clear() self.search_input_element().send_keys(text) self.search_button_element().click() def edit_dialog(self, code=None, name=None, sex=None, grader=None, button=None): """编辑弹窗操作""" if code is not None: self.edit_code_element().clear() self.edit_code_element().send_keys(code) if name is not None: self.edit_name_element().clear() self.edit_name_element().send_keys(name) if sex is not None: self.edit_sex_element().clear() self.edit_sex_element().send_keys(sex) if grader is not None: self.edit_grader_element().clear() self.edit_grader_element().send_keys(grader) if button == "确定": self.edit_confirm_button_element().click() elif button == "取消": self.edit_cancel_button_element().click() else: print("编辑弹窗中按钮只能是确定和取消") def add_data(self, code, name, sex=None, grader=None, button="确定"): """ 由于code、name为必输项,所有一定要接收参数 但sex、grader为非必输项,所有可以不用传值,默认参数设置为None :param code:学号,必输项 :param name:姓名,必输项 :param sex:性别,非必输 :param grader:年级,非必输 :param button:新增时按钮一般都是确认按钮,所有按钮的默认值传入确定 :return: """ self.add_button_element().click() self.edit_dialog(code, name, sex, grader, button) def edit_data(self, header_text, row_text, code=None, name=None, sex=None, grader=None, button="确定"): """编辑数据""" # 使用row_click()方法是为了直接选择要编辑的数据 TableOperation(self.driver).row_click(header_text, row_text) self.edit_button_element().click() self.edit_dialog(code, name, sex, grader, button) def delete_data(self, header_text, row_text, button="确定"): """编辑数据""" # 使用row_click()方法是为了直接选择要删除的数据 TableOperation(self.driver).row_click(header_text, row_text) self.delete_button_element().click() if button == "确定": self.del_confirm_button_element().click() elif button == "取消": self.del_cancel_button_element().click() else: print("编辑弹窗中按钮只能是确定和取消") """ 测试代码 if __name__ == '__main__': from selenium import webdriver driver = webdriver.Chrome() a = LoginPage(driver) a.login() home = HomePage(driver) home.add_data('1001', "张三") home.search("张三") home.edit_data('姓 名', "张三", name="李四") home.search("李四") sleep(1) home.delete_data('姓 名', "李四") sleep(3) a.quit_driver() """
test
pages
aboutPage.py
关于我们页面封装
# -*-coding:utf-8-*-
from selenium.webdriver.common.by import By
from test.pages.loginPage import LoginPage
class AboutPage(LoginPage):
"""关于我们页面"""
def about_element(self):
"""关于我们页面判断元素"""
return self.find_element(By.CSS_SELECTOR, "#about h1")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。