IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> web自动化测试基础知识整合(一) -> 正文阅读

[系统运维]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自己训练模型,这个对没有接触过机器学习的朋友就比较有难度了,对数学知识要求比较高,想做这个的可以先试着去了解一下,这种方式耗时比上面两种更长,但做好了绝对让你成就感爆棚,收获满满的哈。

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

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

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:23:43  更:2021-12-05 12:24:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:20:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码