Python3+Selenium3自动化测试框架——①基本步骤

对之前的步骤进行

一、流程梳理以及功能封装

register_code.py

# coding=utf-8
import json
import random
import time
import requests
from PIL import Image
from selenium import webdriverdriver = webdriver.Chrome()# 浏览器初始化
def driver_init():driver.get("http://www.5itest.cn/register")driver.maximize_window()time.sleep(5)# 获取element信息
def get_element(id):element = driver.find_element_by_id(id)return element# 获取随机数
def get_range_user():user_info = ''.join(random.sample('1234567890abcdefghijklmn', 8))return user_info# 获取图片
def get_code_image(file_name):driver.execute_script('document.body.style.zoom="0.8"')  # 根据电脑缩放比例缩小窗口比例driver.save_screenshot(file_name)code_element = driver.find_element_by_id("getcode_num")left = code_element.location['x']  # 获取左上角点x值top = code_element.location['y']  # 获取左上角点y值right = code_element.size['width'] + left  # 获取元素宽度height = code_element.size['height'] + top  # 获取元素高度im = Image.open(file_name)img = im.crop((left, top, right, height))  # 截取图片img.save(file_name)# 解析图片获取验证码
def code_online(file_name):data = {'token': 'free','type': 'local'}files = {'file': open(file_name, 'rb')}  # binary上传文件response = requests.post('http://www.bhshare.cn/imgcode/', files=files, data=data)result = json.loads(response.text)if result['code'] == 200:return result['data']else:return 'error'# 运行主程序
def run_main():user_name_info = get_range_user()user_email = user_name_info + "@163.com"file_name = "D:/Users/Richard Young/Desktop/imooc.png"driver_init()get_element("register_email").send_keys(user_email)get_element("register_nickname").send_keys(user_name_info)get_element("register_password").send_keys("11111111")get_code_image(file_name)text = code_online(file_name)get_element("captcha_code").send_keys(text)# get_element("register-btn").click()button=get_element("register-btn")driver.execute_script("arguments[0].click();", button)driver.close()run_main()

出现过问题:ElementClickInterceptedException 不可点击

解决:

get_element("captcha_code").click(text)

改为

button=get_element("register-btn")
driver.execute_script("arguments[0].click();", button)

使用js操作进行点击

二、配置文件实现定位设计

1.创建.ini格式的配置文件

记录需要定位的元素

[RegisterElement]
user_email=id>register_email
user_name=id>register_nickname
password=id>register_password
code_image=id>getcode_num
code_text=id>captcha_code
code_text_error=id>captcha_code-error
register_button=id>register-btn

2.封装读取配置文件的方法

read_ini.py

# coding=utf-8
import configparser  # 读取ini工具类文件packageclass ReadIni(object):def __init__(self, file_name=None, node=None):if file_name is None:file_name = r"D:\Users\User\PycharmProjects\selenium_demo\config\LocalElement.ini"if node is None:self.node = "RegisterElement"else:self.node = nodeself.cf = self.load_ini(file_name)# 加载文件def load_ini(self, file_name):cf = configparser.ConfigParser()cf.read(file_name)return cf# 获取value值def get_value(self, key):data = self.cf.get(self.node, key)return dataif __name__ == '__main__':read_init = ReadIni()print(read_init.get_value('user_name'))

3.根据配置文件寻找元素

find_element.py

# coding=utf-8
from util.read_ini import ReadIniclass FindElement(object):def __init__(self, driver):self.driver = driverdef get_element(self, key):read_ini = ReadIni()data = read_ini.get_value(key)by = data.split('>')[0]value = data.split('>')[1]try:if by == 'id':return self.driver.find_element_by_id(value)elif by == 'name':return self.driver.find_element_by_name(value)elif by == 'className':return self.driver.find_element_by_class_name(value)else:return self.driver.find_element_by_xpath(value)except:return None

4.完整流程封装

register_function.py    对前面的register_code.py进一步封装,加入:对注册失败进行截图,多个浏览器测试

# coding = utf-8
import json
import random
import time
import requests
from PIL import Image
from find_element import FindElement
from selenium import webdriverclass RegisterFunction(object):def __init__(self, url,i):self.driver = self.get_driver(url,i)# 获取driver并打开urldef get_driver(self, url,i):if i ==0:driver = webdriver.Chrome()else:driver = webdriver.Edge()driver.get(url)driver.maximize_window()return driver# 输入用户信息def send_user_info(self, key, data):self.get_user_element(key).send_keys(data)# 定位用户信息,获取elementdef get_user_element(self, key):find_element = FindElement(self.driver)user_element = find_element.get_element(key)return user_element# 获取随机数def get_range_user(self):user_info = ''.join(random.sample('1234567890abcdefghijklmn', 8))return user_info# 获取图片def get_code_image(self, file_name):self.driver.execute_script('document.body.style.zoom="0.8"')  # 根据电脑缩放比例缩小窗口比例self.driver.save_screenshot(file_name)code_element = self.get_user_element("code_image")left = code_element.location['x']  # 获取左上角点x值top = code_element.location['y']  # 获取左上角点y值right = code_element.size['width'] + left  # 获取元素宽度height = code_element.size['height'] + top  # 获取元素高度im = Image.open(file_name)img = im.crop((left, top, right, height))  # 截取图片img.save(file_name)# 解析图片获取验证码def code_online(self, file_name):self.get_code_image(file_name)data = {'token': 'free','type': 'local'}files = {'file': open(file_name, 'rb')}  # binary上传文件response = requests.post('http://www.bhshare.cn/imgcode/', files=files, data=data)result = json.loads(response.text)if result['code'] == 200:return result['data']else:return 'error'def main(self,i):user_name_info = self.get_range_user()user_email = user_name_info + "@163.com"file_name = "D:/imooc.png"code_text = self.code_online(file_name)self.send_user_info('user_email', user_email)self.send_user_info('user_name', user_name_info)self.send_user_info('password', '111111111111')self.send_user_info('code_text', code_text)button =self.get_user_element('register_button')self.driver.execute_script("arguments[0].click();", button)code_error=self.get_user_element('code_text_error')if code_error is None:print("注册成功")else:self.driver.save_screenshot(r"D:\error"+str(i)+".png")time.sleep(5)self.driver.close()if __name__ == '__main__':for i in range(2):register_function = RegisterFunction("http://www.5itest.cn/register",i)register_function.main(i)

文档结构:


下一篇:

Python3+Selenium3自动化测试框架——③po模型设计_u011282197的博客-CSDN博客通过设计po模型,对页面定位和页面操作进行分离封装,实现多用例的测试。总体结构:case(用例)→business(业务层)→handle(操作层)→page(页面层)→base(公用)https://blog.csdn.net/u011282197/article/details/122852471?spm=1001.2014.3001.5501

Python3+Selenium3自动化测试框架——②流程梳理及代码封装相关推荐

  1. (上)python3 selenium3 从框架实现代码学习selenium让你事半功倍

    本文感谢以下文档或说明提供的参考. Selenium-Python中文文档 Selenium Documentation Webdriver 参考 如有错误欢迎在评论区指出,作者将即时更改. 环境说明 ...

  2. (下)python3 selenium3 从框架实现代码学习selenium让你事半功倍

    上一篇博文简要 在上一篇博文中已得知:使用 execute 向远程服务器发送请求会通过 webdriver 与浏览器交互,且发送已定义的命令常量可获得一些相关信息. 其中 execute 方法实现已经 ...

  3. 自动化测试框架:几行代码轻松解决Appium环境问题

    移动UI自动化测试中,很多人用appium这个开源框架. 发现很多人在安装时,安装过程中出现各种问题,花费很多时间.特别是团队开始用时.每个人都在这上面踩坑,得不偿失. 我写了一个脚本来自动实现这个安 ...

  4. 【自动化】Python3+Selenium3自动化测试-准备工作

    # 系统:win7(64位) # 浏览器:Chrome(75.0.3770.100) # python版本:3.7.0 # Selenium:3.14.1 Selenium简介 Selenium是一款 ...

  5. Python3+Selenium3自动化测试-(一)

    完成环境的安装并测试之后,我们对Selenium有了一定的了解了,接下来我们继续驱动浏览器做一些基本操作: 窗口尺寸设置.网页截图.刷新.前进和后退 窗口尺寸设置 在测试过程中,我们可能会要求打开浏览 ...

  6. Python3+Selenium3自动化测试-(四)

    selenium鼠标事件 # coding=utf-8import timefrom selenium import webdriver from selenium.webdriver.common. ...

  7. Laravel框架 微信授权登陆 代码封装

    1.在 Libraries  里面封装wechatApi   代码如下: <?phpnamespace App\Http\Libraries;use GuzzleHttp\Client; use ...

  8. 2019 Selenium3与Python3实战开发Web自动化测试框架(一)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 项目源码下载 目录 一丶叙述 二丶环境搭建 三丶项目实战中PO模型的设计与封装 一丶叙述 1.项目介绍 项目分为九部分:基础项目实 ...

  9. python3 selenium_Python3+Selenium3自动化测试-(准备)

    Python3+Selenium3自动化测试-(准备) 最近在学习selenium自动化测试相关的内容,所以将实际准备情况做一记录, # 系统:win10(64位) # 浏览器:Chrome(67.0 ...

最新文章

  1. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)
  2. 那些学校计算机招不满,那些招不满人的985院校,请留意!
  3. git cherry-pick 使用
  4. Apache Flink 简介和编程模型
  5. 数据的聚类(cluster)|| 关联规则 || 回归
  6. 【计算几何】【极角序】【二分】bzoj1914 [Usaco2010 OPen]Triangle Counting 数三角形
  7. 批量快速的导入导出Oracle的数据(spool缓冲池、java实现)
  8. Visio文件编辑查看工具Visio Viewer for Mac
  9. 模板库:8张财务分析类报表,邀您提反馈
  10. 微信小程序 自定义picker封装成插件实现二级三级四级联动
  11. access 分组序号,使用Access SQL进行分组排名
  12. 吹捧导师师娘“神论文”的作者,被处理了
  13. 华为模拟器eNSP配置DHCP自动分配IP地址
  14. php mysql 性能测试工具_MySQL_Sysbench多线程性能测试工具,最近用sysbench进行了较多的性 - phpStudy...
  15. uni-app 压缩图片(base64上传)包含图片验证
  16. 20%的美国Z世代每天刷TikTok超过5小时;多特瑞中国首家旗舰店落户上海 | 美通社头条...
  17. svn造成桌面图标显示问号的处理办法
  18. Android 百度文字识别(详细步骤+源码)
  19. 1004: 惠民工程 (2013年中南大学研究生复试机试 )
  20. 使用频谱分析仪测量微弱信号的3个步骤

热门文章

  1. 网络工程毕设 SSM中药店商城系统(含源码+论文)
  2. AIR32F103(六) ADC,I2S,DMA和ADPCM实现的录音播放功能
  3. win2008+wmiprvse.exe占用CPU高的解决方案
  4. 低功耗主板,加入无线网可能产生电涌,可能影响其他usb设备
  5. 关于mac电池冲电次数
  6. Html2Canvas 常见问题
  7. 黑马全新软件测试学习教程,100G免费学~~
  8. P1177 快速排序
  9. Spring官网获取jar包以及source文件
  10. 无线网dhcp服务器设置,无线网dhcp服务器设置