UI自动化测试之四(JavaScrip类实战、数据驱动)
(一)JavaScrip类实战(js语句可以找开发帮忙编写)
1、实现上下滑动
场景:
在搜索后的所有数据中,实现下滑到底部以及上滑至顶部
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
driver.implicitly_wait(30)
driver.find_element(By.ID,'kw').send_keys('网易云课堂 接口测试')
driver.find_element(By.ID,'su').click()
time.sleep(2)
#下滑到浏览器底部
js='var q=document.documentElement.scrollTop=10000'
#调用JS语言
driver.execute_script(js)
time.sleep(3)
#上滑到浏览器的顶部
js1='var q=document.documentElement.scrollTop=0'
#调用JS语言
driver.execute_script(js1)
time.sleep(3)
driver.close()
2、富文本的处理
场景:
在富文本中插入文字的测试
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def richTest(driver,content):
'''
:param driver: webdriver实例化后的对象信息
:param content: 富文本里面需要输入的文字内容
:return:
'''
js="document.getElementById('ueditor_0').contentWindow.document.body.innerHTML='{0}'".format(content)
driver.execute_script(js)
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://uutool.cn/ueditor/')
driver.implicitly_wait(30)
time.sleep(6)
richTest(driver=driver,content='你好,老弟')
time.sleep(3)
driver.close()
3、时间控件
原理:
时间控件(属于只读属性),通过Js取消他的readonly只读属性,我们把我们需要填写的数据通过value写到代码里
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def startTime(driver,content):
'''开始时间控件'''
js="$(\"input[placeholder='开始时间≥当前时间']\").removeAttr('readonly');" \
"$(\"input[placeholder='开始时间≥当前时间']\").attr('value','{0}')".format(content)
driver.execute_script(js)
def endTime(driver,content):
'''结束时间控件'''
js="$(\"input[placeholder='结束时间>开始时间']\").removeAttr('readonly');" \
"$(\"input[placeholder='结束时间>开始时间']\").attr('value','{0}')".format(content)
driver.execute_script(js)
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/Administrator/Desktop/Time/Time/index.html')
time.sleep(3)
startTime(driver=driver,content='2022-01-01 00:00:00')
time.sleep(3)
endTime(driver=driver,content='2022-09-16 23:59:59')
time.sleep(3)
driver.close()
(二)、数据驱动
定义:
在自动化测试中,把测试中的数据分离到文件中,这样的一个过程叫做数据驱动
表单分离存放数据的文件格式 |
用到的库 |
Json |
Json库 |
Csv |
Csv |
Excel |
Xlrd(需要下载 pip install xlrd) |
Yaml |
Pyyaml(pip install pyyaml) |
Mysql |
Pymysql(pip install pymysql) |
1、json格式:
场景介绍:
我们需要验证新浪邮箱登录时,不输入任何账号的情况下点击登录,测试他的弹窗是否符合要求,那么就需要把需求中的预期结果写到json文件中,然后通过自动化代码编写复现过程,并输出结果与json文件中的预期结果进行对比,没有报错信息即代表实际结果与预期结果一致。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import json
def readJson():
return json.load(open('sina.json','r',encoding='utf-8'))
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://mail.sina.com.cn/')
driver.implicitly_wait(30)
driver.find_element(By.CLASS_NAME,'loginBtn').click()
time.sleep(3)
divText=driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
#python原生断言,assert (类似于实际结果与预期结果的对比过程)
assert divText.text==readJson()['emileNull']
driver.close()
2、yaml格式:
我们需要验证新浪邮箱登录时,不输入任何账号以及输入不正确格式的账号的情况下点击登录,测试他的弹窗是否符合要求,那么就需要把需求中的预期结果写到yaml文件中,然后通过自动化代码编写复现过程,并输出结果与yaml文件中的预期结果进行对比,没有报错信息即代表实际结果与预期结果一致。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import yaml
def readYaml():
with open('sina.yaml','r',encoding='utf-8') as f:
return yaml.safe_load(f)
# print(readYaml(),type(readYaml()))
# print(readYaml()['sina']['emailNull'])
# print(readYaml()['sina']['emailFormat'])
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://mail.sina.com.cn/')
time.sleep(2)
#验证emailNull
driver.find_element(By.CLASS_NAME,'loginBtn').click()
so=driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
time.sleep(3)
assert so.text==readYaml()['sina']['emailNull']
time.sleep(5)
#刷新
driver.refresh()
#验证emailFormat
driver.find_element(By.ID,'freename').send_keys('qwer')
driver.find_element(By.CLASS_NAME,'loginBtn').click()
so=driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
time.sleep(3)
assert so.text==readYaml()['sina']['emailFormat']
time.sleep(5)
driver.close()
3、csv格式:
我们需要验证新浪邮箱登录时,不输入任何账号以及输入不正确格式的账号的情况下点击登录,测试他的弹窗是否符合要求,我们需要把预期结果写入到Excel文件中,然后通过保存时保存格式为.csv的格式,然后复制文件粘贴至当前项目包下
注意:粘贴过来的文档需要进行读取(重新创建一个同级模块存放读取文档的代码,后面继承即可)
import csv
#通过列表的方式读取
def readCsvList():
lists=[ ]
with open('data.csv','r',encoding='utf-8') as f:
reader=csv.reader(f)
#取消读取
next(reader)
for item in reader:
lists.append(item[0])
return lists
#通过字典的方式读取
def readCsvDict():
lists=[]
with open('data.csv','r',encoding='utf-8-sig') as f:
reader=csv.DictReader(f)
for item in reader:
lists.append(dict(item))
return lists
输出结果:
实际操作
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from UiAutomation.data import *
class Init(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.get('https://mail.sina.com.cn/')
self.driver.implicitly_wait(30)
def tearDown(self) -> None:
self.driver.close()
#读取的csv文件是列表的形式的
class LoginTest(Init):
def test_username_null(self):
'''验证用户名为空的错误信息'''
self.driver.find_element(By.CLASS_NAME,'loginBtn').click()
time.sleep(2)
divText = self.driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
self.assertEqual(divText.text, readCsvList()[0])
def test_emile_format(self):
'''验证用户名格式不正确的错误信息'''
self.driver.find_element(By.ID,'freename').send_keys('werte')
self.driver.find_element(By.CLASS_NAME,'loginBtn').click()
time.sleep(2)
divText=self.driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
self.assertEqual(divText.text,readCsvList()[1])
#读取的csv文件是字典的形式
class LoginTest1(Init):
def test_username_null(self):
'''验证用户名为空的错误信息'''
self.driver.find_element(By.CLASS_NAME,'loginBtn').click()
time.sleep(2)
divText = self.driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
self.assertEqual(divText.text, readCsvDict()[0]['result'])
def test_emile_format(self):
'''验证用户名格式不正确的错误信息'''
self.driver.find_element(By.ID,'freename').send_keys('werte')
self.driver.find_element(By.CLASS_NAME,'loginBtn').click()
time.sleep(2)
divText=self.driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
self.assertEqual(divText.text,readCsvDict()[1]['result'])
if __name__ == '__main__':
unittest.main()
4、Excel格式:
我们需要验证新浪邮箱登录时,不输入任何账号以及输入不正确格式的账号的情况下点击登录,测试他的弹窗是否符合要求,我们把预期结果写入到Excel文件中,保存后,复制文件粘贴至项目包中
读取文件:
import xlrd
'''excel格式'''
def readExcel():
'''读取Excel文件中的内容'''
lists=[ ]
book=xlrd.open_workbook('data.xls')
sheet=book.sheet_by_index(0)
for item in range(1,sheet.nrows):
lists.append(sheet.row_values(item)[0])
return lists
输出结果:
实际操作:
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from UiAutomation.data import *
class Init(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.get('https://mail.sina.com.cn/')
self.driver.implicitly_wait(30)
def tearDown(self) -> None:
self.driver.close()
class LoginTest(Init):
def test_username_null(self):
'''验证用户名为空的错误信息'''
self.driver.find_element(By.CLASS_NAME,'loginBtn').click()
time.sleep(2)
divText = self.driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
self.assertEqual(divText.text, readExcel()[0])
def test_emile_format(self):
'''验证用户名格式不正确的错误信息'''
self.driver.find_element(By.ID,'freename').send_keys('werte')
self.driver.find_element(By.CLASS_NAME,'loginBtn').click()
time.sleep(2)
divText=self.driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
self.assertEqual(divText.text,readExcel()[1])
if __name__ == '__main__':
unittest.main()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架