Selenium(九)測試用例數據分離與從文件導入數據


一.測試用例數據與代碼分離

1.從之前的腳本來看,我還是把數據寫在了腳本中,這樣腳本的通用性很差。全局的數據其實可以從數據庫、文本文件、Excel中直接讀取。

2.代碼和用戶數據分離:

3.數據設計--以字典的形式

from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait



def openBrower():                    #配置瀏覽器
    webdriver_handle = webdriver.Firefox()
    return webdriver_handle      
                                      
def openUrl(handle,url):               #打開url
    handle.get(url)

def get_ele_times(driver,times,func):
    return WebDriverWait(driver,times).until(func)  #等待方法    

def findElement(driver,arg):
    '''
     arg must be dict
     1.login:登錄入口
     2.user_xpath:用戶名
     3.pwd_xpath:密碼
     4.login_xpath:登錄按鈕
     
     return useEle,pwdEle,loginEle
    '''
    ele_login = get_ele_times(driver,10,lambda driver:driver.find_element_by_xpath(arg['login']))
    ele_login.click()      
    useEle = driver.find_element_by_xpath(arg['user_xpath'])
    pwdEle = driver.find_element_by_xpath(arg['pwd_xpath'])
    loginEle = driver.find_element_by_xpath(arg['login_xpath'])
    return useEle,pwdEle,loginEle

def sendVals(eletuple,arg):
    '''
    ele tuple
    account:uname,pwd
    '''
    listkey = ['uname','pwd']
    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,text):
    try:
        driver.find_element_by_link_text(test)
        print ("ACCOUNT AND PWD ERROR!")
    except:
         print ("ACCOUNT AND PWD RIGHT!")
    
def login_test(ele_dict):
    driver = openBrower()
    openUrl(driver,ele_dict['url'])
    driver.maximize_window()
       
    ele_tuple = findElement(driver,ele_dict)   #接收字典的值
    
    sendVals(ele_tuple,ele_dict)
    checkResult(driver,ele_dict['errorid'])
    
    driver.find_element_by_link_text('退出').click()
    
if __name__ == '__main__':
    url = 'http://www.maiziedu.com/'                          #將數據都放入字典中
    account = 'XXX'
    pwd = 'maizi123456'
    ele_dict = {'url':url,'login':'/html/body/div[2]/div/div/div/div/a[2]','user_xpath':'//*[@id="id_account_l"]',\
                'pwd_xpath':'//*[@id="id_password_l"]','login_xpath':'//*[@id="login_btn"]',\
                'errorid':'該賬號不正確','uname':account,'pwd':pwd}

    login_test(ele_dict)

這樣把用戶名和密碼也加入字典中是不合理的,所以要把用戶名和密碼抽出來單獨用一個list存放:

def login_test(ele_dict,user_list):
    driver = openBrower()
    openUrl(driver,ele_dict['url'])
    driver.maximize_window()
       
    ele_tuple = findElement(driver,ele_dict)   #接收字典的值
    for arg in user_list:
        sendVals(ele_tuple,arg)
        checkResult(driver,ele_dict['errorid'])
    
if __name__ == '__main__':
    url = 'http://www.maiziedu.com/'
    account = 'XXX'
    pwd = 'maizi123456'
    ele_dict = {'url':url,'login':'/html/body/div[2]/div/div/div/div/a[2]','user_xpath':'//*[@id="id_account_l"]',\
                'pwd_xpath':'//*[@id="id_password_l"]','login_xpath':'//*[@id="login_btn"]',\
                'errorid':'該賬號不正確'}
    user_list = [{'uname':account,'pwd':pwd}]
    login_test(ele_dict,user_list)
    
    

 

二.從文件導入數據

 

1.webinfo.py

#coding:UTF-8
import codecs

def get_webinfo(path):
    web_info={}                  #定義一個空的字典 
    #config=open(path)
    config = codecs.open(path,'r','utf-8')    #打開一個路徑為path的txt文件 如果打印的話 會出現txt文件里的所有內容
    for line in config:        #一行一行的遍歷txt文件中的內容
        result = [ele.strip() for ele in line.split('=')]
        '''
        列表解析以'='符號為分隔,將遍歷的一行的內容放在一個數組里,每一個result的形式都是[ , ] 
        可用來調試查看是否通過“=”分離開數據 print(result)
        '''
        web_info.update(dict([result]))
                    
    return web_info

def get_userinfo(path):
    user_info = []
    config = codecs.open(path,'r','utf-8')   
    for line in config:
        user_dict = {}
        result = [ele.strip() for ele in line.split(' ')]
        for r in result:
            account = [ele.strip() for ele in r.split('=')]
            user_dict.update(dict([account]))
        user_info.append(user_dict)  
    return user_info        

if __name__ == '__main__':
    webinfo = get_webinfo(r'C:\Users\胡廷祥\Desktop\webinfo.txt')
    for key in info:
        print(key,info[key])    
        userinfo = get_userinfo(r'C:\Users\胡廷祥\Desktop\userinfo.txt')
    for l in userinfo:
        print(l)
    print(userinfo)

 

 

2.login.py

from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from webinfo import get_webinfo
from webinfo import get_userinfo

def openBrower():                    #配置瀏覽器
    webdriver_handle = webdriver.Firefox()
    return webdriver_handle      
                                      
def openUrl(handle,url):               #打開url
    handle.get(url)

def get_ele_times(driver,times,func):
    return WebDriverWait(driver,times).until(func)  #等待方法    

def findElement(driver,arg):
    '''
     arg must be dict
     1.login:登錄入口
     2.user_xpath:用戶名
     3.pwd_xpath:密碼
     4.login_xpath:登錄按鈕
     
     return useEle,pwdEle,loginEle
    '''
    ele_login = get_ele_times(driver,10,lambda driver:driver.find_element_by_xpath(arg['login']))
    ele_login.click()      
    useEle = driver.find_element_by_xpath(arg['user_xpath'])
    pwdEle = driver.find_element_by_xpath(arg['pwd_xpath'])
    loginEle = driver.find_element_by_xpath(arg['login_xpath'])
    return useEle,pwdEle,loginEle

def sendVals(eletuple,arg):
    '''
    ele tuple
    account:uname,pwd
    '''
    listkey = ['uname','pwd']
    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,text):
    try:
        driver.find_element_by_link_text(test)
        print ("ACCOUNT AND PWD ERROR!")
    except:
         print ("ACCOUNT AND PWD RIGHT!")
    
def login_test(ele_dict,user_list):
    driver = openBrower()
    openUrl(driver,ele_dict['url'])
    driver.maximize_window()
       
    ele_tuple = findElement(driver,ele_dict)   #接收字典的值
    for arg in user_list:
        sendVals(ele_tuple,arg)
        checkResult(driver,ele_dict['errorid'])
    
if __name__ == '__main__':
    url = 'http://www.maiziedu.com/'
    account = 'XXX'
    pwd = 'maizi123456'
    '''
    ele_dict = {'url':url,'login':'/html/body/div[2]/div/div/div/div/a[2]','user_xpath':'//*[@id="id_account_l"]',\
                'pwd_xpath':'//*[@id="id_password_l"]','login_xpath':'//*[@id="login_btn"]',\
                'errorid':'該賬號不正確'}
   user_list = [{'uname':account,'pwd':pwd}]
    '''
    ele_dict = get_webinfo(r'C:\Users\XXX\Desktop\webinfo.txt')
    user_list = get_userinfo(r'C:\Users\XXX\Desktop\userinfo.txt')
    #file webinfo/userinfo  ele_dict = get_webinfo(path) user_list = get_userinfo(path)
    login_test(ele_dict,user_list)
    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM