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

大体思路:

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

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

最新文章

  1. MyISAM与InnoDB区别
  2. HTML、CSS、JS在前端开发中都扮演怎样的角色
  3. Sep14学习笔记_pipe() & fork()
  4. 【读书笔记】.Net并行编程高级教程(二)-- 任务并行
  5. Canvas 示例:4种超炫的网站动画背景效果
  6. [转]图片中的字符分割提取(基于opencv)
  7. Power Gating的设计(概述)
  8. C#特性
  9. jxl导入/导出excel
  10. 12.04 如何更专业的使用Chrome开发者工具
  11. v9 频道页如果有下级栏目跳转到第一个栏目链接
  12. sqlserver存储过程及mybatis调用——待续
  13. CSS绝对定位元素居中的几种方法
  14. 25个SSH命令
  15. 尚硅谷springboot学习24-错误处理
  16. Java8 CompletableFuture
  17. Oracle与MySQL区别
  18. QPainter、QPainterPath、QBrush
  19. git教程(全)
  20. sqler sql 转rest api 源码解析(一)应用的启动入口

热门文章

  1. VM无法正常使用桥接模式获取IP上网
  2. Mysql 添加用户并授所有权
  3. 【插件】【idea】的Mybatis Plugin插件方便mapper接口方法和mapper XML文件之间来回切换
  4. MYSQL --Subquery returns more than 1 row查询结果多于一行
  5. BJFU—214基于链式存储结构的图书信息表的创建和输出
  6. VB.NET 读写XML
  7. Map 集合按字母排序方法
  8. spring Boot 学习(三、Spring Boot与检索)
  9. springcolud 的学习(二).SpringCloud微服务框架
  10. asp.net core 核心对象解析