zoukankan      html  css  js  c++  java
  • Python实战之Selenium自动化测试web登录(2)

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    from userdata import get_webinfo, get_userinfo, XlUserInfo
    from log_module import Loginfo, Xlloginfo
    
    def get_ele_times(driver, times, func):
        return WebDriverWait(driver, times).until(func)
    
    def openBrower():
        '''
        :return: webdriver handle
        '''
        webdriver_handle = webdriver.Firefox()
        return webdriver_handle
    
    # def openUrl(handle, url):
    #     handle.get(url)
    #     handle.maximize_window()
    
    def openUrl(handle, arg):
        handle.get(arg['url'])
        handle.maximize_window()
    
    def findElement(d, arg):
        '''
        1.test_id:
        2.USERID
        3.pwdid
        4.loginid
        :param d:
        :param arg:
        :return:
        '''
        if 'text_id' in arg:
            ele_login = get_ele_times(d, 10, lambda d: d.find_element_by_link_text(arg['text_id']))
            ele_login.click()
        userEle = d.find_element_by_id(arg['userid'])
        pwdEle = d.find_element_by_id(arg['pwdid'])
        loginEle = d.find_element_by_id(arg['loginid'])
        # sign_out
        # signOutEle = d.find_element_by_id(arg['signOutid'])
        # print(signOutEle)
        return userEle, pwdEle, loginEle
    
    def findOutele(d, arg):
        try:
            signOutEle = d.find_element_by_id(arg['signOutid'])
            return signOutEle
        except:
            print("You are not login.")
    
    def sendVal(eletuple, arg):
        '''
    
        :param eletuple:
        :param arg:
        :return:
        '''
        list_key = ['uname','pwd']
        i = 0
        for key in list_key:
            eletuple[i].send_keys('')
            eletuple[i].clear()
            # print(arg[key])
            eletuple[i].send_keys(arg[key])
    
            i += 1
        eletuple[2].click()
    
    def checkResult(d, err_id, arg, log):
        result = False
        time.sleep(3)
        try:
            err = d.find_element_by_id(err_id)
            print("Account and pwd error")
            # msg = "account:{},password:{}==>error:{}".format(arg['uname'],arg['pwd'], err.text)
            log.log_write(arg['uname'], arg['pwd'], 'Error', err.text)
            print(err.text)
        except:
            print("Account and pwd Right")
            # msg = "Account:{},password:{}==>pass!".format(arg['uname'], arg['pwd'])
            log.log_write(arg['uname'], arg['pwd'], 'Pass')
            result = True
        return result
    
    def logout(d, ele_dict):
        d.find_element_by_class_name(ele_dict['logout']).click()
    
    def login_test(ele_dict,user_list):
        d = openBrower()
        # log = Loginfo()
        log = Xlloginfo()
        log.log_init('sheet1', 'uname', 'pwd','result', 'message')
        openUrl(d, ele_dict)
        ele_tuple = findElement(d, ele_dict)
        # print(user_list[0])
        for user_info in user_list:
            sendVal(ele_tuple, user_info)
            result = checkResult(d, ele_dict['errorid'], user_info, log)
            # sign_out
            # findOutele(d, ele_dict).click()
            if result:
                # logout
                logout(d, ele_dict)
                #login
                ele_tuple = findElement(d, ele_dict)
            else:
                ele_tuple = findElement(d, ele_dict)
        log.log_close()
    
    if __name__ == '__main__':
        '''
        ele_dict = {
            'url': 'http://www.maiziedu.com',
            'uname':'maizi_test@139.com',
            'pwd': 'abc123456',
            'login_text':'Login',
            'text_id': login_text,
            'userid': 'id_account_l',
            'pwdid': 'id_password_l',
            'loginid': 'login_btn',
            'signOutid':'sign_out',
        }
        user_list = [{'uname':account,'pwd':pwd},]
        '''
        # file webinfo/userinfo get_webinfo(path),user_list = get
        ele_dict = get_webinfo(r'webinfo.txt')
        # user_list = get_userinfo(r'userinfo.txt')
        xinfo = XlUserInfo(r'userinfo.xlsx')
        user_list = xinfo.get_sheetinfo_by_index(0)
        login_test(ele_dict,user_list)

    Log_Module

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    
    import time
    import xlsxwriter
    class Loginfo(object):
        def __init__(self, path = '', mode= 'a'):
            self.file_time = time.strftime('%Y-%m-%d', time.gmtime())
            self.log_time = time.strftime('%H-%M-%S')
            fname = "{}{}".format(path, self.file_time)
            self.log = open("{}{}.txt".format(path, fname), mode)
    
        def log_init(self, sheetname, *title):
            pass
    
        def log_write(self, msg):
            self.log.write("
    {}+{}".format(self.log_time, msg))
    
        def log_close(self):
            self.log.close()
    
    class Xlloginfo(object):
        def __init__(self, path = ''):
            fname = '{}{}'.format(path,time.strftime('%Y-%m-%d', time.gmtime()))
            self.row = 0
            self.xl = xlsxwriter.Workbook(path+fname+'.xls')
            self.style = self.xl.add_format({'bg_color':'red'})
    
        def xl_write(self, *args):
            col = 0
            style = ''
            if 'Error' in args:
                style = self.style
            for val in args:
                self.sheet.write_string(self.row, col, val)
                col += 1
            self.row += 1
    
        def log_init(self, sheetname, *title):
            self.sheet = self.xl.add_worksheet(sheetname)
            self.sheet.set_column('A:E', 30)
            self.xl_write(*title)
    
        def log_write(self, *args):
            self.xl_write(*args)
    
        def log_close(self):
            self.xl.close()
    
    if __name__ == '__main__':
        # log = Loginfo()
        # log.log_write('hahaha')
        # log.log_close()
    
        xinfo = Xlloginfo()
        xinfo.log_init('test12','uname','pwd', 'result', 'info')
        xinfo.log_close()

    UserData

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    import codecs
    import xlrd, xlsxwriter
    
    def get_webinfo(path):
        web_info = {}
        with codecs.open(path,'r','utf-8') as config:
            for line in config:
                result = [ele.strip() for ele in line.split('=')]
                # print("Result,",result)
                web_info.update(dict([result]))
        return web_info
    
    def get_userinfo(path):
        user_info = []
        with codecs.open(path,'r','utf-8') as config:
            for line in config:
                user_dict = {}
                result = [ele.strip() for ele in line.split(';')]
                for info in result:
                    account = [ele.strip() for ele in info.split('=')]
                    # print(account)
                    # print("Dict",dict([account]))
                    user_dict.update(dict([account]))
                user_info.append(user_dict)
        return user_info
    
    class XlUserInfo(object):
        def __init__(self, path= ''):
            self.xl = xlrd.open_workbook(path)
    
        def floattostr(self, val):
            if isinstance(val, float):
                val = str(int(val))
            return val
    
        def get_sheet_info(self):
            listkey = ['uname','pwd']
            infolist = []
            for row in range(1, self.sheet.nrows):
                info = [self.floattostr(val) for val in self.sheet.row_values(row)]
                temp = zip(listkey, info)
                infolist.append(dict(temp))
            return infolist
    
        def get_sheetinfo_by_name(self, name):
            self.sheet = self.xl.sheet_by_name(name)
            return self.get_sheet_info()
    
        def get_sheetinfo_by_index(self, index):
            self.sheet = self.xl.sheet_by_index(index)
            return self.get_sheet_info()
    
    
    
    if __name__ == '__main__':
        # userinfo = get_userinfo(r'userinfo.txt')
        # print(userinfo)
        # for user in userinfo:
        #     print(user)
        # webinfo = get_webinfo(r'webinfo.txt')
        # print(webinfo)
        xinfo = XlUserInfo(r'userinfo.xlsx')
        info = xinfo.get_sheetinfo_by_index(0)
        print(info)
        info = xinfo.get_sheetinfo_by_name('Sheet1')
        print(info)
  • 相关阅读:
    优化后的组合算法
    Android之——AsyncTask和Handler对照
    LeetCode(30) Substring with Concatenation of All Words
    HDU--1054--Strategic Game【最小点覆盖】
    最小生成树模板(poj3625)
    QT中使用高速排序
    走进APICloud的世界 (1)
    layer,一个可以让你想到即可做到的javascript弹窗(层)解决方案
    解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:
    移动端H5的一些基本知识点总结
  • 原文地址:https://www.cnblogs.com/william126/p/7358444.html
Copyright © 2011-2022 走看看