zoukankan      html  css  js  c++  java
  • 【原创】selenium+python+openpyxl实现登录自动化测试,自动读取excel用例数据,并将数据结果自动写入到excel

     1 # -*- coding: utf-8 -*-
     2 from selenium import webdriver
     3 from openpyxl import load_workbook
     4 from time import sleep
     5 class mylogintest():
     6     '''打开百度测试'''
     7 
     8     def openBD(self):
     9         '''打开百度'''
    10         print("begin")
    11         book = load_workbook("mylogintest.xlsx")  # 默认可读写,若有需要可以指定write_only和read_only为True
    12         b = book.active
    13         datadict = {} #创建一个字典变量
    14         maxC = b.max_column#获取最大列
    15         maxR = b.max_row#获取最大行
    16         for i in range(1, maxC + 1):#range默认从0开始,到后面参数的-1结束,而openpyxl都是从第一行第一列开始的,所以参数为1,maxC+1;意思就是遍历第一列到最后一列,
    17             datadict.setdefault(b.cell(1, i).value)#将第一行中的所有列即2标题作为键放到字典datadict里面
    18             # print(datadict)
    19         for i in range(2, maxR + 1):#除去第一行标题,从第二行遍历到最后一行
    20             for j in range(1, maxC + 1):#从第一列遍历到最后一列
    21                 datadict[b.cell(1, j).value] = b.cell(i, j).value#把第二行的内容作为键对应的值放入字典datadict里面
    22             try:
    23                 self.driver = webdriver.Firefox()
    24                 self.driver.get(datadict["url"])#从对应键里取出对应的URL值,这里的键就是表格的第一行标题,所以EXCEL的标题要按照规定来写
    25                 self.driver.find_element_by_xpath("/html/body/div[1]/div/div[1]/div[3]/a[1]/img").click()
    26                 if datadict["username"]!=None:
    27                     username = self.driver.find_element_by_name("username").send_keys(datadict["username"])#当用户名不为空时,把值放到username文本框中
    28                 if datadict["password"] != None:
    29                     password = self.driver.find_element_by_name("password").send_keys(datadict["password"])#当密码不为空时,把值放到password文本框中,要判断一下否则会出错
    30                 self.driver.find_element_by_id("loginbtn").click()#点击登录
    31                 if datadict["checkmeg"]!=None:#当校验值不为空时
    32                     msg = self.driver.find_element_by_xpath("/html/body/div[8]/div").text#比对校验值
    33                     if msg == datadict['checkmeg']:#如果校验值比对成功,将校验值写入结果
    34                         b.cell(i, maxC, msg)
    35                     else:
    36                         b.cell(i, maxC, '失败')#否则将失败写入结果中
    37                 else:#当校验值不为空时
    38                 # print(self.driver.switch_to.alert.text)
    39                     cur_url = self.driver.current_url#判断当前url
    40                     if cur_url == datadict['checkurl']:#如果当前url是校验的url
    41                         b.cell(i, maxC, '登录成功')  # 就将测试登录成功结果写入表格中
    42                     else:
    43                         b.cell(i, maxC, '登录失败')  # 就将测试登陆失败结果写入表格中
    44                 sleep(1)
    45                 self.driver.quit()
    46 
    47             except:
    48                 b.cell(i, maxC, 'error')#当程序出现错误时,将错误结果写入表格中
    49 
    50         book.save("mylogintest.xlsx")#最后记得关闭
    51 
    52         print("end")
    53 
    54 mylogintest().openBD()

    大体思路:

    将登陆分为两种情况:一种是登陆成功的情况,一种是登陆失败的情况,如果是登陆成功的checkmeg为空,比对checkurl,如果是登录失败的,直接比对checkmeg,然后将执行结果写入表格中;

    脚本中直接判断checkmeg是否为空就行,根据checkmeg是否为空,用不同的方式比对两种情况,最终得到结果;

  • 相关阅读:
    Centos7 keepalived 修改日志路径
    mysql 双主复制 centos7
    CentOs 7 安装mysql5.7.18(二进制版本)
    oracle、mysql新增字段,字段存在则不处理
    mysql+ibatis 批量插入
    oracle+ibatis 批量插入-支持序列自增
    oracle 批量插入-支持序列自增
    sftp上传
    java
    mysql
  • 原文地址:https://www.cnblogs.com/lelexiong/p/8999827.html
Copyright © 2011-2022 走看看