0
点赞
收藏
分享

微信扫一扫

webUI自动化测试中图片验证码的解决方法

秀儿2020 2022-04-18 阅读 52
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:特昂糖
import pytesseract
from PIL import Image
from selenium import webdriver
import time as t

driver=webdriver.Chrome()
driver.get('*******************')
driver.maximize_window()
driver.implicitly_wait(30)
t.sleep(2)

driver.find_element_by_xpath('//*[@id="formLogin"]/div[3]/div[3]/img').screenshot('1.png')   #截取验证码并保存到本地

ver=pytesseract.image_to_string(Image.open('1.png'))   #识别截图中的字符串

with open('index.txt',"w") as f:        #将识别出的字符串写入到文件中
    f.write("".join(ver.split()))       #因为识别到的文字有空格,所有我这里做了去除空格的处理

with open("index.txt","r") as f:        #将写入的字符串读取出来并赋值给a
    a=f.read()


driver.find_element_by_xpath('//*[@id="inputCode"]').send_keys(ver)     #将读取到的字符串填写到验证码输入框
t.sleep(3)
driver.quit()

那么问题来了,文字识别的准确率不是100%我们应该怎么去判断是否登录成功呢?

比如我在测试代码中做了一个if循环,判断URL是不是还是登录页面的地址,如果是,那就重新识别一下,代码如下:

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:特昂糖
import pytesseract
from PIL import Image
from selenium import webdriver
import time as t

driver=webdriver.Chrome()
driver.get('http://****************')
driver.maximize_window()
driver.implicitly_wait(30)
t.sleep(2)

driver.find_element_by_xpath('//*[@id="formLogin"]/div[3]/div[3]/img').screenshot('1.png')   #截取验证码并保存到本地

ver=pytesseract.image_to_string(Image.open('1.png'))   #识别截图中的字符串

with open('index.txt',"w") as f:        #将识别出的字符串写入到文件中
    f.write("".join(ver.split()))       #因为识别到的文字有空格,所有我这里做了去除空格的处理

with open("index.txt","r") as f:        #将写入的字符串读取出来并赋值给a
    a=f.read()

driver.find_element_by_xpath('//*[@id="username"]').send_keys("******")  #输入用户名
t.sleep(1)
driver.find_element_by_xpath('//*[@id="password"]').send_keys("******")  #输入密码
t.sleep(1)
driver.find_element_by_xpath('//*[@id="inputCode"]').send_keys(ver)     #输入验证码
t.sleep(1)
driver.find_element_by_xpath('//*[@id="formLogin"]/div[5]/div/div/span/button')   #点击登录
t.sleep(2)
if driver.current_url=='http://**************.com':      #如果URL为登录页面的URL
    
    driver.find_element_by_xpath('//*[@id="formLogin"]/div[3]/div[3]/img').screenshot('1.png')  # 截取验证码并保存到本地
    ver = pytesseract.image_to_string(Image.open('1.png'))  # 识别截图中的字符串
    with open('index.txt', "w") as f:  # 将识别出的字符串写入到文件中
        f.write("".join(ver.split()))  # 因为识别到的文字有空格,所有我这里做了去除空格的处理
    with open("index.txt", "r") as f:  # 将写入的字符串读取出来并赋值给a
        a = f.read()

    driver.find_element_by_xpath('//*[@id="username"]').send_keys("******")  # 重新输入用户名
    t.sleep(1)
    driver.find_element_by_xpath('//*[@id="password"]').send_keys("********")  # 重新输入密码
    t.sleep(1)
    driver.find_element_by_xpath('//*[@id="inputCode"]').send_keys(ver)  # 重新输入验证码
    t.sleep(1)
    driver.find_element_by_xpath('//*[@id="formLogin"]/div[5]/div/div/span/button')  # 点击登录
    t.sleep(2)
else:
    pass
driver.quit()

举报

相关推荐

0 条评论