各位好,我是新人好学的小师弟,今天和大家分享下我这周在工作上写的一个关于登陆界面自动化测试的一个python脚本。
思路:通过selenium模拟浏览器浏览,并定位用户名和密码所在的位置(id,class,或者xpath),再通过python中的xlrd库导入excel中事先写好的测试用例,然后通过定位好的位置send_keys('excel导出来的测试用例'),for循环一下,就可以持续的把测试用例执行完了。
注:1.目前的设计中还没有包含到登陆界面有验证码存在的这种情况。后续会继续补充!!!目前的思路是,获取验证码的位置,然后selenium截图,接着导入图片解析库,识别验证码,在send_keys。
2.测试用例目前只包含四种情况:①用户名和密码均正确②用户名空 密码正确③用户名正确 密码空④用户名和密码均错误
步骤1:打开网站
from selenium import webdriver #导入selenium中的webdriver ,浏览器驱动
driver=webdriver.Chrome(r'D:\python_3.9.6\chromedriver')#导入谷歌驱动,这里用的是谷歌浏览器的驱动 注意驱动要和浏览器版本匹配
url='你想要登陆的测试的网址' #''引号里面输入你想要登陆的测试的网址
driver.get(url)
步骤2:定位用户名和密码位置
F12 定位位置 用xpath或者id或者class
username = driver.find_element_by_class_name("el-input__inner").send_keys(array["用户名"])#定位位置并且输入用户名
步骤3:写一个excel表格做导入的用,测试用例目前只包含四种情况:①用户名和密码均正确②用户名空 密码正确③用户名正确 密码空④用户名和密码均错误
注意:如果用户名或者密码均为数字,记得将单元格格式设置为文本,并且在单元格前面加一个英文单引号,出现绿色箭头说明成功了。因为纯数字的话,xlrd导入进去会变成浮点型,所以我们事先这样设置好,导入进去就是int了。
步骤4:提取excel表格中的测试用例,因为是一个用户名配一个输入值,一个密码配一个输入值,这种键值对组合和python中的字典一样。所以我们可以创建一个字典来获得用户名的值,密码的值。
data=xlrd.open_workbook(r"D:\py_test.xls") #输入excel的存储路径,打开excel
tables=[] #定义一个空列表,追加字典集合,打印出来给测试人员看看,也可以不设置
table=data.sheets()[0] #按照索引顺序把data里的数据导入到table中,就是定义数据要按照索引顺序来,table只是一个工作表,把它打印出来就是Sheet 0:
for rown in range(table.nrows): #将table表中的内容一行一行的遍历 ,遍历到rown中去
array={'用户名':'','密码':''} #创建一个字典
array['用户名']=table.cell_value(rown, 0)#第一列的每一行值为字典array['用户名']的值
array['密码'] = table.cell_value(rown, 1)#第二列的每一行值为字典array['密码']的值
步骤5:if语句判断。如果用户名不为空,那就在用户名上输入相应的值;如果密码不为空,那就在密码上输入相应的值;如果用户名为空,那就输入密码的值;如果密码为空,那就输入用户名的值,最后定位下登录键的位置,click一下,就完事了。
if array["用户名"]!=None:
username = driver.find_element_by_class_name("el-input__inner").send_keys(array["用户名"])
if array["用户名"] == None:
password = driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/form/div[2]/div/div/input').send_keys(array["密码"])
if array["密码"] == None:
username = driver.find_element_by_class_name("el-input__inner").send_keys(array["用户名"])
if array["密码"] != None:
password = driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/form/div[2]/div/div/input').send_keys(array["密码"])
driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/form/div[3]/div/button').click()#找到登录键的位置,click
time.sleep(3) #等待下
步骤6:判断是不是成功登录,就看是不是成功跳转到页面,用跳转后的页面url和登陆成功的url做判断,一样就是登陆成功,不一样就是失败。
cur_url = driver.current_url#截取当前界面的url
num=num+1#这个计数是看你已经执行了几次循环了,完整代码里有
if cur_url == '登录成功的页面url': #引号里写你自己登陆成功的页面网址,和当前网址做判断
print(num,'登陆成功')
else:
print(num,'登陆失败',cur_url)#输出执行第几个测试用例,登陆失败,输出当前网址
time.sleep(1)#休息下
步骤7:如果是登陆界面用户名为空,密码不为空,按了登录键以后,下一次再执行时,需要刷新下页面
driver.refresh()#刷新页面
driver.get('输入登录页面网址')#输入登陆页面网址
完整代码
import xlrd
from selenium import webdriver
import time
num=0 #计数 执行第几个
driver=webdriver.Chrome(r'D:\python_3.9.6\chromedriver') #谷歌驱动
url='登陆页面网址' #登陆页面网址
driver.get(url)
data=xlrd.open_workbook(r"D:\py_test.xls") #导入excel的路径
Table=[] #定义一个空列表
table=data.sheets()[0] #按照索引顺序把data里的数据导入到table中
for rown in range(table.nrows): #一行一行的遍历
array={'用户名':'','密码':''} #定义一个字典
array['用户名']=table.cell_value(rown, 0)
array['密码'] = table.cell_value(rown, 1)
if array["用户名"]!=None:
username = driver.find_element_by_class_name("el-input__inner").send_keys(array["用户名"])
if array["用户名"] == None:
password = driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/form/div[2]/div/div/input').send_keys(array["密码"])
if array["密码"] == None:
username = driver.find_element_by_class_name("el-input__inner").send_keys(array["用户名"])
if array["密码"] != None:
password = driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/form/div[2]/div/div/input').send_keys(array["密码"])
driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/form/div[3]/div/button').click()
time.sleep(3)
cur_url = driver.current_url#获得当前网址
num=num+1
if cur_url == '成功登陆界面的网址': #输入成功登陆界面的网址
print(num,'登陆成功')
else:
print(num,'登陆失败',cur_url)
time.sleep(1)
driver.refresh() #刷新下页面
driver.get('输入登陆界面的网址') #输入登陆界面的网址
Table.append(array) #追加列表
print(Table)
print(Table) # 打印列表
新人创作不易,觉得不错的看官,点个赞吧,么么哒!!!
转载注明出处!