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是否为空,用不同的方式比对两种情况,最终得到结果;