• ddt数据驱动在ui自动化中的应用一【多测师】


    import xlrd
    from selenium import webdriver
    import ddt
    import time
    import unittest
     
    class Excel(object):
     
        def __init__(self,excel_path,sheet_name):
            self.excel_file=xlrd.open_workbook(excel_path)
            self.sheet =self.excel_file.sheet_by_name(sheet_name)
            self.sheet_name =self.sheet.name
            self.rows = self.sheet.nrows
            self.cols = self.sheet.ncols
     
        """返回单元格,计数(0,0)表示第一行,第一列的单元格"""
        def get_sheet_data(self,row,col):
                test_data = self.sheet.cell(row ,col).value
     
        """读取excel,并处理数据返回"""
        def read_excel(self):
                list=[]
                for row in range(2,self.rows):
                    lists=self.sheet.row_values(row)[:self.cols]
                    list1=[]
                    dict={}
                    for j in range(self.cols):
     
                        list1.append(lists[j].encode('utf-8'))
     
                    dict['order_currency']=list1[0].decode('utf-8')
                    dict['order_amount']=list1[1].decode('utf-8')
                    dict['DFSXml']=list1[2].decode('utf-8')
                    dict['card_number']=list1[3].decode('utf-8')
                    dict['secureCode']=list1[4].decode('utf-8')
                    list.append(dict)
                return  list
     
     
    class Base(object):
        def __init__(self,driver):
            self.driver = driver
        def by_xpath(self,xpath):
            return self.driver.find_element_by_xpath(xpath)
     
        def by_id(self,id):
            return self.driver.find_element_by_id(id)
     
        def inputText(self,ele,text):
            ele.clear()
            ele.send_keys(text)
     
        def getTitle(self):
            return self.driver.current_url
     
     
    def run(browser,secureCode,order_currency,order_amount,card_number,DFSXml):
        browser.get("https://dfs.oceanpayment.com/pages/testPay.html")
        page = Base(browser)
        page.inputText(page.by_id("secureCode"), secureCode)
        page.inputText(page.by_id("order_currency"),order_currency)
        page.inputText(page.by_id("order_amount"), order_amount)
        js_bom = "document.documentElement.scrollTop=500"
        browser.execute_script(js_bom)
        page.inputText(page.by_id("order_number"),card_number)
        jsToTop ="document.documentElement.scrollTop=-500"
        browser.execute_script(jsToTop)
        page.inputText(page.by_id("DFSXml"),DFSXml)
        page.by_id("btnAdd").click()
        alert = browser.switch_to_alert()
        alert.accept()
        time.sleep(5)
        print(page.getTitle())
     
    @ddt.ddt
    class TestRun(unittest.TestCase):
     
        path=r"E://Card.xlsx" #windows 保存excel文件的路径,需要更改根据存放位置
        st_name='Diners' # excel sheet 名称不变不改
        test_data= Excel(path,st_name).read_excel()
        def setUp(self):
              opt= webdriver.ChromeOptions()
              opt.add_argument('--start-maximized')
              driver=webdriver.Chrome(options=opt)
              driver.implicitly_wait(10)
              self.driver=driver
        def tearDown(self):
            self.driver.close()
        @ddt.data(*test_data)
        def test_pay(self,dict):
            run(self.driver,dict["secureCode"],dict["order_currency"],dict["order_amount"],dict["card_number"],dict['DFSXml'])
     
     
    if __name__ == '__main__':
        unittest.main()
  • 相关阅读:
    linux 制作不用密碼可立即登入的 ssh 用戶
    大部分人都会忽略的Python易错点总结
    Python:有参装饰器与多个装饰器装饰一个函数
    Python面向对象中super用法与MRO机制
    Python实现一个键对应多个值的字典(multidict)
    python中*和**的打包和解包
    面试题:python 中 staticmethod 和 classmethod有什么区别
    Python小练习:StringIO和BytesIO读写操作的小思考
    Python中为什么不能用可变对象作为默认参数的值
    django中csrftoken跨站请求伪造的几种方式
  • 原文地址:https://www.cnblogs.com/xiaoshubass/p/13110065.html
Copyright © 2020-2023  润新知