【自动化登陆页面测试脚本】python+selenium+excel表格,自动化页面登录测试

举报
钧瑜 发表于 2023/10/29 17:35:14 2023/10/29
【摘要】 【自动化登陆页面测试脚本】python+selenium+excel表格,自动化页面登录测试

今天和大家分享下我这周在工作上写的一个关于登陆界面自动化测试的一个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:<Sheet1>
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) # 打印列表
    
 
 

2个博客id : 钧瑜 /好学的小师弟
 
 
 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。