Csv
csv是通用的、相对简单的文件格式,其文件以纯文件形式存储数据。(在excel中创建需要先创建一个*.xlsx文件,然后将该文件
CSV UTF-8(逗号分隔)(*.csv)格式。如果直接将文件存为csv格式可能会出现问题)
将创建好的data.csv文件拖到存放数据的data包下面。data.csv文件的内容如下图:
csv读取数据 有两种方式:
1、列表的方式 , 代码如下 :
import csv
from utils.pathUtils import filePath
def readCsvList():
'''列表的读取方式,读取csv的文件内容'''
lists=[]
with open(filePath(fileName='data.csv'),encoding='utf-8') as f:
reader=csv.reader(f)
#不读取data.csv文件的第一行
next(reader)
#循环列表
for item in reader:
#加到列表用append方法。
lists.append(item)
# return lists #读取完第一行,返回第一行。
return lists #每读取完一行就返回整个列表
#直接输出,检查代码是否能正常运行
print(readCsvList())
运行结果如下图:
2、字典的方式,代码如下:
import csv
from utils.pathUtils import filePath
def readCsvDict():
'''字典的读取方式,读取csv的文件内容'''
lists=[]
#读取的文件中有时候会出现"\ufeff"非法字符,这个时候需要改变编码方式'UTF-8'为'UTF-8-sig'
with open(filePath(fileName='data.csv'),encoding='utf-8-sig') as f:
reader=csv.DictReader(f)
for item in reader:
lists.append(dict(item))
#return lists #读取完第一行,返回第一行。
return lists #每读取完一行就返回整个列表
# print(readCsvDict())
运行结果如下图:
Csv实战
1、sina邮箱为例,代码如下:
base基础包bases.py
from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import NoSuchFrameException
from selenium.webdriver.support.wait import WebDriverWait
from selenium import webdriver
import time as t
class WebUI:
def __str__(self):
return 'driver'
'''不管是单元素定位还是单元素定位参数都是*loc'''
'''单个元素定位的方法'''
def findElement(self,*loc):
return self.driver.find_element(*loc)
'''多个元素定位的方法'''
def findsElements(self,*loc):
return self.driver.find_elements(*loc)
def findFrame(self, frameID):
return self.driver.switch_to.frame(frameID)
@property
def getTitle(self):
return self.driver.Title
@property
def getUrl(self):
t.sleep(2)
return self.driver.current_url
数据包data下的文件data.csv文件,代码如下:
username,password,期望结果
,,请输入邮箱名
asddsDf,Asdf,您输入的邮箱名格式不正确
sddtfy@sina.com,sdsfghjgf,登录名或密码错
对象层包page下的文件init.py和sina.py文件,代码如下:
init.py文件,代码如下:
import unittest
from selenium import webdriver
class InitSina(unittest.TestCase):
def setUp(self) -> None:
#1、前置条件
self.driver=webdriver.Chrome()
self.driver.maximize_window()
self.driver.get('https://mail.sina.com.cn/')
self.driver.implicitly_wait(30)
sina.py文件,代码如下:
from selenium.webdriver.common.by import By
from base.bases import WebUI
import time as t
#继承了WebDrive的类
class Sina(WebUI):
#封装属性
username_loc=(By.ID,'freename')
password_loc=(By.ID,'freepassword')
login_loc=(By.LINK_TEXT,'登录')
promptText=(By.XPATH,'/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
nick=(By.XPATH,'//*[@id="user_id"]/em[2]')
nickone=(By.XPATH,'//*[@id="greeting"]/span')
def username(self,username):
'''输入用户名'''
self.findElement(*self.username_loc).send_keys(username)
def password(self,password):
'''输入密码'''
self.findElement(*self.password_loc).send_keys(password)
@property
def clickLogin(self):
self.findElement(*self.login_loc).click()
def login(self,username,password):
self.username(username)
self.password(password)
#self.clickLogin()
self.clickLogin
@property
def getpromptText(self):
t.sleep(2)
return self.findElement(*self.promptText).text
@property
def getNick(self):
t.sleep(3)
return self.findElement(*self.nick).text #获取的时文本信息,所以是.text
@property
def getNickOne(self):
t.sleep(3)
return self.findElement(*self.nickone).text # 获取的时文本信息,所以是.text
测试包test下的test_sina_csv_list.py文件(用列表的方式读取),代码如下:
import time as t
from page.sina import Sina
from page.init import InitSina
from utils.csvUtils import readCsvList
import unittest
class SinaTest(InitSina,Sina):
def test_sina_login_001(self):
#索引的方式来定位
self.login(username=readCsvList()[0][0],password=readCsvList()[0][1])
self.assertEqual(self.getpromptText,readCsvList()[0][2])
if __name__ == '__main__':
unittest.main(verbosity=2)
运行后,结果如下图:
Excel
在ui自动化测试中,处理Excel文件需要使用的第三方库xlrd,安装命令pip3 install xlrd,安装结果如下图:
excel文件读取处理,先创建一个data.xls文件,文件内容如下图:
读取Excel中的数据代码如下:import xlrd
from utils.pathUtils import filePath
def readExcel():
'''读取excel的文件'''
lists=[]
book=xlrd.open_workbook(filePath(fileName='data.xls'))#打开data.xls文件,获得句柄
sheet=book.sheet_by_index(0) #sheet就是excel表格下面的表单,是按照索引来获取的。
for item in range(1,sheet.nrows): #nrow,返回该工作表的有效行数
#最好一行row_vlues()读取sheet表单里XX行的数据
lists.append(sheet.row_values(item)) #row_values(num)读取num行整行数据
return lists print(readExcel())
运行的结果如下图:(返回的数据类型是列表)
Excel实战(别的公共部分base包下的bases.py和page包下的init.py和sina.py文件的代码在csv实战中)
from page.sina import Sina
from page.init import InitSina
from utils.execlUtils import readExcel
import unittest
class SinaTest(InitSina,Sina):
def test_file_sina_001(self):
'''登录验证:用户名密码为空的信息'''
self.login(username=readExcel()[0][0],password=readExcel()[0][1])
#获取错误提示信息
self.assertEqual(self.getpromptText,readExcel()[0][2])
if __name__ == '__main__':
unittest.main(verbosity=2)