zoukankan      html  css  js  c++  java
  • 基于python+selenium的框架思路

    设想:

    1、使用excel编写用例第一个sheet页为用例概要格式如下:

    后面的sheet页为具体的用例步骤:

    实现所有定位信息都与测试代码分离

    2、读取该excel文件取出关键字等信息,作为关键字的参数,通过反射机制传递给关键字方法去执行。

      关键字模块如下:ObjectMap.py

    # coding:utf-8
    from selenium.webdriver.support.ui import WebDriverWait
    
    
    #获取单个页面元素对象
    def get_element(driver, locationType, locatorExpression):
        try:
            element = WebDriverWait(driver, 30).until(lambda x:x.find_element(by=locationType,value = locatorExpression))
            return element
        except Exception, e:
            raise e
    
    
    def get_elements(driver , locationType, locatorExpression):
        try:
            elements = WebDriverWait(driver, 30).until(lambda x:x.find_elements(by=locationType,value=locatorExpression))
            return elements
        except Exception, e:
            raise e
    
    # 由于关键字函数的参数个数不一样,所以通过传递动态参数*args实现传参,关键字方法
    # 最多需要(driver , locationType, locatorExpression, operationValue)四个参数
    def open_browser(driver, *args):
        driver.get(args[2])
    
    
    def input_string(driver, *args):
        WebDriverWait(driver, 30).until(lambda x: x.find_element(by=args[0], value=args[1])).send_keys(args[2])
    
    
    def click(driver, *args):
        WebDriverWait(driver, 30).until(lambda x: x.find_element(by=args[0], value=args[1])).click()
    

    测试执行代码如下:

    # coding:utf-8
    from util import ObjectMap, ExcelUtil
    import xlrd, xlwt
    import time
    from xlutils.copy import copy
    
    def baidu_search():
        #初始化操作,创建driver
        from selenium import webdriver
        start_time = time.time()
        # print start_time
        driver = webdriver.Chrome()
        #读取excel中的关键字的值,定位方式的值,定位表达式,和操作值等参数值。然后将参数值传到对应关键字方法中
        excelFile = xlrd.open_workbook(r"D:KeyWordsFrameWork	estScriptssearch.xlsx", formatting_info=True)
        sheet = excelFile.sheet_by_index(1)
        maxRows = sheet.nrows
        # print maxRows
    
        for row in range(1, maxRows-1):
            keyword = sheet.row_values(row)[2]
            locationType = sheet.row_values(row)[3]
            locatorExpression = sheet.row_values(row)[4]
            operationValue = sheet.row_values(row)[5]
            # dir(ObjectMap)获取该模块的所有方法和变量
            # print dir(ObjectMap)
            for i in dir(ObjectMap):
                if keyword == i:
                    # print i
                    # 要用到反射机制,通过函数名字符串调用对应方法:http://www.liujiangblog.com/course/python/48
                    if hasattr(ObjectMap, keyword):
                        # print '有这个方法'
                        func = getattr(ObjectMap, keyword)
                        func(driver, locationType, locatorExpression, operationValue)
        end_time = time.time()
        take_time = end_time-start_time
        print take_time
        excleFileCopy = copy(excelFile)
        case_sheet = excleFileCopy.get_sheet(0)
        case_sheet.write(1,5,take_time)
        excleFileCopy.save(r"D:KeyWordsFrameWork	estScriptssearch.xlsx")
    
    
    if __name__ == '__main__':
        baidu_search()
    

      

  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/gcgc/p/9497339.html
Copyright © 2011-2022 走看看