webUI自动化(五)Excel关键字驱动实现

webUI自动化(五)Excel关键字驱动实现

base_05_Excel关键字驱动实现.py
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

from base.chrome_options import chrome_options

class Base:
    def __init__(self):
        self.driver = webdriver.Chrome(chrome_options=chrome_options())
        self.driver.implicitly_wait(5)      #隐式等待5秒

    def open(self,data_dict):
        """打开网址"""
        self.driver.get(data_dict['txt'])

    def locate(self,data_dict):
        """定位,应用显式等待"""
        """
        WebDriverWait(driver,timeout,poll_frequency,ignored_exceptions)
            driver:浏览器驱动
            timeout:最长超时时间,默认以秒为单位。
            poll_frequency:检测的间隔步长,默认为0.5s。即每0.5s询问一次,元素是否找到。
            ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementExeception异常。
        """
        try:
            ele = WebDriverWait(self.driver, 6, 0.5).until(lambda s: s.find_element(data_dict['locate_by'],data_dict['locate_value']))  # 显式等待
            # ele = self.driver.find_element(ele_type,ele_value)
            return ele
        except:
            print("定位失败")
            raise

    def input(self,data_dict):
        """输入"""
        self.locate(data_dict).send_keys(data_dict['txt'])
        # self.driver.find_element(ele_type,ele_value).send_keys(txt)

    def click(self,data_dict):
        """单击"""
        self.locate(data_dict).click()
        # self.driver.find_element(ele_type,ele_value).click()

    def max_window(self,data_dict):
        """窗口最大化"""
        self.driver.maximize_window()

    def switch_to_iframe(self,data_dict):
        """切换到iframe"""
        self.driver.switch_to.frame(data_dict['txt'])

    def switch_to_windows(self,data_dict):
        """切换新窗口"""
        windows = self.driver.window_handles
        self.driver.switch_to.window(windows[int(data_dict['txt'])])      #指定切换哪一页面,-1为最新页面

    def assert_locate(self,data_dict):
        """断言"""
        assert self.locate(data_dict) is not None,'断言失败'
        print('断言成功!')

    def wait(self,data_dict):
       """固定等待"""
       sleep(int(data_dict['txt']))

    def quit(self,data_dict):
        """退出浏览器"""
        self.driver.quit()

main05_Excel关键字驱动实现.py
import openpyxl

from base.base_05_Excel关键字驱动实现 import Base

class Script:
    def __init__(self,excel_path):
        #实例化Base
        self.b = Base()     #类属性
        #获取excel对象,得到数据
        self.excel_obj = openpyxl.load_workbook(excel_path)     #类属性

    def run(self,sheet_name):       #类方法
        #获取sheet页的值
        self.sheet_obj = self.excel_obj[sheet_name]  # 获取sheet页对象
        values = self.sheet_obj.values  # 获取sheet页值

        for value in values:
            data_dict = dict()
            if value[0] != '编号' and int(value[1]) == 1:
                data_dict['no'] = value[0]
                data_dict['step_name'] = value[2]
                data_dict['kw'] = value[3]
                data_dict['locate_by'] = value[4]
                data_dict['locate_value'] = value[5]
                data_dict['txt'] = value[6]
                data_dict['note'] = value[7]
                data_dict['except'] = value[8]

                # 执行用例
                # 获取属性:getattr(对象,属性名称/方法名)(参数)
                # getattr(对象,属性名称/方法名)(参数)传入参数 data_dict 原因:base工具类中的各个方法有不同长度的参数,
                # 有些3个如:input(self,ele_type,ele_value,txt);有些2个如:excel_read(excel_path,sheet_name),有些0个如:switch_to_windows(self)
                # 长度不一,因此传入 data_dict 进行传参,让各个参数优化为字典传参,优化base工具类
                getattr(self.b,data_dict['kw'])(data_dict)

    def quit(self):     #类方法
        #退出浏览器和excel对象
        self.b.wait({'txt':'5'})
        self.excel_obj.close()
        self.quit({})

if __name__ == '__main__':
    excel_path = "./data/data.xlsx"
    s = Script(excel_path)
    try:
        s.run("bilibili")
    finally:
        s.quit()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值