zoukankan      html  css  js  c++  java
  • python+selenium自动化禅道登录测试

     本文以禅道登录测试为例,思路主要分openBrowser、openUrl、findElement、sendVals、checkResult、ReadUserdate六部分

    openBrowser

    def openBrowser():    #实例化和返回webdriver对象,打开浏览器
        driver = webdriver.Chrome()
        return driver
    

    openUrl

    def openUrl(driver,url):    #传入webdriver对象和url
      driver.get(url)      #打开禅道地址,地址信息放到Excel表中进行维护,具体见ReadUserdate模块获取数据   driver.set_window_size(1280,1080)    #设置浏览器大小,或打开全屏
    driver.maximize_window
      driver.find_element_by_link_text('开源版').click()  #点击选择开源版

    findElement

    def findElement(driver,arg):    #定位登录用户、密码、登录按钮元素位置,arg参数为传出web信息,具体见ReadUserdate
        actelem = driver.find_element_by_id(arg['actid'])
        pwdelem = driver.find_element_by_name(arg['pwdname'])
        loginelem = driver.find_element_by_id(arg['loginid'])
        return actelem,pwdelem,loginelem
    

    sendValues

    def sendValues(eletuple,arg):    #进行用户名、密码输入操作,点击登录
        listkey = ['account','password']
        i = 0
        for key in listkey:        #对findEleent中的用户名、密码、登录按钮元素进行操作
            eletuple[i].send_keys('')  #输入空格
            eletuple[i].clear()      #清除输入框,当输入错误密码时清除,为下一个用户做登录
            eletuple[i].send_keys(arg[key])  #输入用户名、密码
            i += 1
        eletuple[2].click()  #点击的登录按钮

     checkResult

    def checkResult(driver,asserele):  #登录成功断言
        result = False
        try:
            driver.find_element_by_link_text(asserele)  #如果找到“asserele”元素(传参),即登录成功,返回True
            print('Account And Pwd Right!')
            result = True
        except:
            print('Account And Pwd Error!')
        return result
    

    logout

    def logout(driver,test_dict):    #注销操作
        driver.find_element_by_class_name(test_dict['toggle']).click()
        driver.find_element_by_link_text(test_dict['logout']).click()
    

    login_test

    def login_test(test_dict,act_dict):    #登录测试
        d = openBrowser()            #打开浏览器
        openUrl(d,test_dict['url'])      #打开禅道地址
        ele_tuple = findElement(d,test_dict)  #定义元素对象
        for user_arg in act_dict:    
            sendValues(ele_tuple,user_arg)    #输入用户名、密码、点击登录
            sleep(1)
            result = checkResult(d,test_dict['error'])  #断言
            sleep(2)        
            if result:
                logout(d,test_dict)    #注销
                ele_tuple = findElement(d,test_dict)  #重新获取元素
        sleep(5)
        d.quit()
    

    ReadUserdate,主要实现数据与代码分离(Xlrd模块使用可看这篇文章参考:https://www.cnblogs.com/Archer-Xin/p/12142417.html)  

    import codecs
    import xlrd
    import datetime
    from xlrd.xldate import xldate_as_tuple
    
    def get_excel_userinfo(file):    #获取用户信息表数据
        colnum = 0
        sheet_name = '第一页'
        '''
        file:默认文件路径及名称;
        colnum:默认第一行的值为表头;
        sheet_name:默认读取excel表中名称为”第一页“的工作表。
        '''
        book = xlrd.open_workbook(file)                #打开excel文件返回Book对象
        sheet1 = book.sheet_by_name('第一页')   #获取”第一页“工作表对象;获取第一个工作表
        colnames = sheet1.row_values(colnum)      #获取第一行的值,作为表头
        nrows = sheet1.nrows                      #获取表中的有效行数
    
        list = []       #定义返回数据为列表形式
        for rownum in range(1,nrows):      #从第2行开始遍历每行的数据
            rowvalues = sheet1.row_values(rownum)
            if rowvalues:
                dictlist = {}       #定义获取的用户信息为字典形式
                for i in range(len(colnames)):     #遍历表头值个数
                    ctype = sheet1.cell(rownum,i).ctype     #获取单元格数据类型,empty(为空)为0;string为1;number为2;date为3;boolean为4;error为5
                    cellvalues = sheet1.cell_value(rownum,i)
                    if ctype == 2:      #number类型转化为整形
                        cellvalues = int(cellvalues)
                    '''
                    #日期转换,还存在问题
                    elif ctype == 4:
                        date = datetime(xldate_as_tuple(cellvalues, 1))
                        cellvalues = date.strftime('%Y/%d/%m %H:%M:%S')
                    '''
                    dictlist[colnames[i]] = cellvalues      #将遍历每行中的值赋值给对应的表头值,并添加到dictlist字典中
            list.append(dictlist) 
        return list    #返回为列表
    
    def get_excel_webinfo(file):    #获取web界面信息表数据
        book = xlrd.open_workbook(file)
        sheet1 = book.sheet_by_index(0)
        ncols = sheet1.ncols
        nrows = sheet1.nrows
        colvalues1 = sheet1.col_values(0)
        colvalues2 = sheet1.col_values(1)    
        list = {}      #返回字典集
        for rownum in range(nrows):      #第一列数据等于第二列数据
            list[colvalues1[rownum]] = colvalues2[rownum]      
        return list  

    整体代码:  

    from selenium import webdriver
    from time import sleep
    from selenium.webdriver.support.wait import WebDriverWait
    from ReadUserdate import get_webinfo,get_userinfo,get_excel_userinfo,get_excel_webinfo
    
    def openBrowser():
        driver = webdriver.Chrome()
        return driver
    
    def openUrl(driver,url):
        driver.get(url)
        driver.set_window_size(1280,1080)
        driver.find_element_by_link_text('开源版').click()
    
    def findElement(driver,arg):
        actelem = driver.find_element_by_id(arg['actid'])
        pwdelem = driver.find_element_by_name(arg['pwdname'])
        loginelem = driver.find_element_by_id(arg['loginid'])
        return actelem,pwdelem,loginelem
    
    def sendValues(eletuple,arg):
        listkey = ['account','password']
        i = 0
        for key in listkey:
            eletuple[i].send_keys('')
            eletuple[i].clear()
            eletuple[i].send_keys(arg[key])
            i += 1
        eletuple[2].click()
    
    def checkResult(driver,asserele):
        result = False
        try:
            driver.find_element_by_link_text(asserele)
            print('Account And Pwd Right!')
            result = True
        except:
            print('Account And Pwd Error!')
        return result
    
    def logout(driver,test_dict):
        driver.find_element_by_class_name(test_dict['toggle']).click()
        driver.find_element_by_link_text(test_dict['logout']).click()
    
    def login_test(test_dict,act_dict):
        d = openBrowser()
        openUrl(d,test_dict['url'])
        ele_tuple = findElement(d,test_dict)
        for user_arg in act_dict:    
            sendValues(ele_tuple,user_arg)
            sleep(1)
            result = checkResult(d,test_dict['error'])
            sleep(2)        
            if result:
                logout(d,test_dict)
                ele_tuple = findElement(d,test_dict)
        sleep(5)
        d.quit()
    
    if __name__ == '__main__':    
      #运行程序进行测试
        test_dict = get_excel_webinfo(r'F:学习文件Python文件enDaoRobotTestwebinfo.xlsx')
        act_dict = get_excel_userinfo(r'F:学习文件Python文件enDaoRobotTestuserinfo.xlsx')
        login_test(test_dict,act_dict)
     

    excel数据表:

     程序为使用表中用户名、密码进行登录,如果用户名、密码都正确,则进行注销,再使用下一个用户名、密码进行登录,所以只需要对userinfo的Excel文件的用户数据进行设计,无需修改代码。比如正确用户名和密码;错误用户名和正确密码;正确用户名和错误密码等,具体需求具体分析,根据需求设计用户信息

    运行结果:

     ReadUserdate获取到的数据形式:

    需要使用什么值,只需要指定字典中对应的键值即可

      

      

  • 相关阅读:
    有点郁闷,但是又不能表现出来,好难过
    搞平衡,我们公司跟国企也没有啥区别
    找兼职遇到的尴尬
    两岁的儿子
    Shark DB Expert 2.6数据库客户端工具终结者 问世
    .Net 中访问Oracle 数据表,出现OCI22053: overflow error
    Oracle冷备迁移过程和在线日志损坏处理
    转:Oracle数据库的优化之数据库磁盘I/O
    Linux批量移动文件grep+mv
    Oracle下导入txt的shell脚本以及配置
  • 原文地址:https://www.cnblogs.com/Archer-Xin/p/12150111.html
Copyright © 2011-2022 走看看