Python Web自动化测试学习-PO模型在自动化测试中的应用(2)

公共方法篇
用例生成

页面封装

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")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值