web自动化测试基础知识整合(一)

1.EC判断页面是否加载成功

from selenium import webdriver
import time
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

# 全局定义注册页面地址
register_url = "http://www.5itest.cn/register"

# 创建 driver 对象
driver = webdriver.Chrome()
driver.get(url=register_url)


# 第一种延时操作,主动延时
# 加载 url 等待 5 秒
time.sleep(5)
# 判断是否进入了用户注册页:
# 通过title是否加载成功,来判断注册页面是否加载成功了,下面的打印结果说明了该对象存在于内存对象中也就是title加载成功了
# <selenium.webdriver.support.expected_conditions.title_contains object at 0x00000237FE954E48>
print(EC.title_contains("注册"))


# 另一种延时操作,比time.sleep更优化一些,检查注册邮箱是否被加载出来,
service_agreement = driver.find_element_by_id("register_email")
locator = (By.ID, "register_email")
# 下面的打印结果说明了该对象存在于内存对象中也就是加载成功了
# <selenium.webdriver.remote.webelement.WebElement (session="ef6eb689955b964079ccd8bc565d59a5", element="574ba31b-0ff0-4b67-853b-3680eb751fe9")>
print(WebDriverWait(driver, 5).until(EC.visibility_of_element_located(locator)))


# 执行完,关闭浏览器(否则一直加载驱动,导致执行环境内存被驱动耗尽)
driver.close()

2. 元素定位及填写

在这里插入图片描述

可以看到元素定位有多种方式,比较方便的是使用xpath,用法也简单,选中要定位的那一行右键copy,然后copy_xpath就行了。

在这里插入图片描述
下面尝试用几种方法定位:

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

# 全局定义注册页面地址
register_url = "http://www.5itest.cn/register"

# 创建 driver 对象
driver = webdriver.Chrome()
driver.get(url=register_url)


# 查找主页页面元素并给它们填写对应的值
# 定位邮箱地址
# register_email = driver.find_element_by_id("register_email")
# print(register_email.get_attribute('placeholder')) # 获取placeholder的属性值:填写你常用的邮箱作为登录帐号
# register_email.send_keys("test@163.com")


# # 定位用户名
# register_nickname = driver.find_element_by_xpath('//*[@id="register_nickname"]')
# print(register_nickname.get_attribute("placeholder")) # 获取placeholder的属性值:中、英文均可,最长18个英文或9个汉字
# register_nickname.send_keys("wang")

# # 定位密码
# register_password = driver.find_element_by_name("password")
# register_password.send_keys('wang123')
# print(register_password.get_attribute('value'))   # 获取当前输入的值 : wang123


# 定位验证码
captcha_code = driver.find_element_by_xpath('//*[@id="captcha_code"]')
captcha_code.send_keys('q2hs') # 验证码当然不能随便瞎输,这里只是测试是否定位到元素实现输入,后面会讲验证码识别
print(captcha_code.get_attribute("placeholder")) # 验证码


3. 随机生成测试数据

import random


# 生成测试注册邮箱数据
for i in range(5):
    register_testMail = ''.join(random.sample('123456789abcdef', 8)) + "@163.com"
    print(register_testMail)

# 生成测试用户名数据
for i in range(5):
    register_testUsername = ''.join(random.sample('abcdefghijk', 5))
    print(register_testUsername)
 
'''
d3c4f72a@163.com
4aedf158@163.com
7d2ecba3@163.com
6d137fab@163.com
65b834e2@163.com
bdgfa
chbkj
ejifg
bfjeh
bgjfc
'''

4. 精准截取验证码图片的思路

以这个网站:http://www.5itest.cn/register
为例,抓包发现验证码图片url虽然不变,但每次请求返回来的都不一样,这就意味着我们用url获取图片再识别就没有效果,所以我们就另辟蹊径,直接截图定位把它抠出来再识别:

import time
from PIL import Image
from selenium import webdriver

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://www.5itest.cn/register")
driver.maximize_window()
time.sleep(5)
driver.save_screenshot('./images/big.png')
# capch = driver.find_element_by_xpath('//*[@id="getcode_num"]')
capch = driver.find_element_by_id('getcode_num')

print(capch.location)
left = capch.location['x']
top = capch.location['y']
right = capch.size['width']+ left
low = capch.size['height'] + top
im = Image.open('./images/big.png')
# img = im.crop((left,top,right,low))  # 本来应该是这样大小,不知道时候跟系统有关,我的是win10系统必须乘以1.25才可
img = im.crop((left*1.25,top*1.25,right*1.25,low*1.25))
img.save('./images/code.png')

效果:
在这里插入图片描述

5. 图片验证码的识别解决方案

    1. 规则的,简单的可以用 pytesseract进行识别
      可以参考我这篇文章学习:
      python实现简单的验证码识别
    1. 复杂的,可以借助打码平台
      怎么个复杂法,比如以前的铁路12306官网登陆,给你一个名词,然后让你从6张图里选出两张和该名词相对应的,现在还好,已经整成滑块的了,还有一些网站的验证码是计算题,或者智能问答题之类的,这就比较不讲武德了,
      打码平台有很多,百度一下就知道,比如云打码、超级鹰等打码平台,这种专业的平台都有针对各种各样的验证码,看一下超级鹰的:
      在这里插入图片描述

用法也很简单,官网都有代码示例,这种打码平台后台对接的肯定是人工,所以它是要收费的,1块钱1000题分,咳咳,果然是充钱才能变强哈!

    1. 用机器学习训练字体库
      可以用TensorFlow或者Pytorch自己训练模型,这个对没有接触过机器学习的朋友就比较有难度了,对数学知识要求比较高,想做这个的可以先试着去了解一下,这种方式耗时比上面两种更长,但做好了绝对让你成就感爆棚,收获满满的哈。

好了,到这里也该跟大家说再见了,创作不易,如果本文对你有用,请给俺点个赞吧,虽然我并不会因此获利,但这真的是对我的肯定与鼓舞,欢迎收藏加点赞哈。

山野千里,只要在路上,内心就满是欢喜,继续坚持,继续加油啊!!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰履踏青云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值