selenium3与Python3实战 web自动化测试框架

selenium3与Python3实战 web自动化测试框架 学习 教程

一、环境搭建

1、selenium环境搭建

Client:

  •  pycharm
  •  python3.6

Driver:

  •  Chrome → ChromeDriver
  •  Firefox  → FirefoxDriver
  •  IE         → InternetExplorerDriver

Selenium

1.1、Selenium安装

pip install selenium  # 安装
from selenium import webdriver  # 导入
driver = webdriver.Chrome()  # 启动谷歌浏览器
driver.get("http://www.baidu.com")  # 打开百度网址
# 注意:启动谷歌浏览器前需要配置好谷歌浏览器中间件 ,从网上下载chromedriver.exe ,将其放置到python的安装目录下

1.2、使用脚本启动不同浏览器

启动浏览器前需配置好浏览器对应driver:

  • Chrome --chromedriver.exe :谷歌浏览器调试驱动插件
  • Firefox --geckodrive.exe : 火狐浏览器调试驱动插件
  • IE --MicrosoftWebDriver.exe : IE浏览器调试驱动插件

将上面三个exe文件下载后放置到python目录下

1)启动谷歌浏览器

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('http://www.baidu.com')

2)启动火狐浏览器:

from selenium import webdriver

driver = webdriver.Firefox()

driver.get('http://www.baidu.com')

3)启动IE浏览器

from selenium import webdriver

driver = webdriver.Ie()

# driver = webdriver.Edge()  # win 10版本启动IE浏览器,使用此行代码

driver.get('http://www.baidu.com')

2、使用expected_condition下的 title_contains判断页面标题是否与我们想要的一致,如判断页面标题是否有‘注册’字眼:

from selenium import webdriver

from selenium.webdriver.support import expected_conditions

import time

driver = webdriver.Chrome()

# driver = webdriver.Edge()  # win 10版本启动IE浏览器,使用此行代码

driver.get('http://www.5itest.cn/register')

time.sleep(5)

is_live = expected_conditions.title_contains('注册')  # 判断页面的标题中是否有注册两字

print('is_live:',is_live)

返回结果:

is_live: <selenium.webdriver.support.expected_conditions.title_contains object at 0x000000000354DEF0>  # 存在

3、使用不同方式进行定位

访问注册链接:http://www.5itest.cn/register ,进行测试

 

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('http://www.5itest.cn/register')

driver.find_element_by_id('register_email').send_keys("nan@163.com")  # 填写邮箱

user_name_node = driver.find_elements_by_class_name('controls')[1]  # 使用classname进行定义,需要细心处理

user_name_node.find_element_by_class_name('form-control').send_keys('Eric_nan')  # 填写用户名

driver.find_element_by_name('password').send_keys('111111')  # 填写密码

driver.find_element_by_xpath('//*[@id="captcha_code"]').send_keys('2222')  # 填写验证码

脚本控制启动浏览器并访问注册页面,同时自动输入我们设定的值:

 

4、使用expected_conditions判断元素是否可见

from selenium import webdriver

from selenium.webdriver.support import expected_conditions

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

locator = (By.CLASS_NAME,'controls')  # 通过classname的方式 找到 controls

WebDriverWait(driver,1).until(expected_conditions.visibility_of_element_located(locator))

# WebDriverWait: 传入两个参数,一个是driver,另一个是超时时间(int类型)

# visibility_of_element_located:只在可见的元素里找对应的元素。如有返回内存地址

 5、如何解决验证码自动输入

1)将注册页面全屏截图保存(使用driver.save_screenhot方法),再将验证码部分区域截图保存下来

打开本地图片、截取部分区域需要用到PIL ,安装:pip install -i

base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 项目首路径

image_path = os.path.join(base_dir,'Image','imooc.png')  # 图片路径,用于保存全屏截图后的图片

code_path = os.path.join(base_dir,'Image','code.png')  # 验证码图片保存路径

driver.get('http://www.5itest.cn/register')

driver.save_screenshot(image_path)  # 全屏截图

code_element = driver.find_element_by_id("getcode_num") # 定位到验证码所在的文字

# print(code_element.location)   # 获取该元素(图片)左上角的(x,y)坐标

# print(code_element.size)   # 获取该元素(图片)长度、宽度

left_x = code_element.location['x'] # 左上角x值

top_y = code_element.location['y'] # 左上角y值

right_x = left_x + code_element.size['width']  # 右下角x值

right_y = top_y + code_element.size['height']  # 右下角y值

im = Image.open(image_path) # 使用PIL下的Image打开下载的imooc.png图片

img = im.crop((left_x,top_y,right_x,right_y))  # 将指定的某部分裁剪出来

img.save(code_path) # 保存

2)使用 showapiRequest解决图片验证码识别

①、使用pytesseract识别图片中得问题

  安装:pip install pytesseract

import pytesseract

from PIL import Image

image = Image.open("E:/imooc2.png")

text = pytesseract.image_to_string(image) # 将图片文字转换成字符串

print(text)

# 缺点:机械性读取,无法读取图片中不规则的字体,不适合于干扰性比较强的验证码图片文字读取

选择:验证码识别英数_文件 ,找到请求示例,下载SDK:ShowapiRequest.py

 

将 ShowapiRequest.py文件放到项目中,新建read_code_img.py文件,用于读取图片中的验证码:

 验证码:

from setting.ShowapiRequest import ShowapiRequest

from setting import setting

r = ShowapiRequest("http://route.showapi.com/184-4","62666","d61950be50dfgjnr9969f741b8e730f5" )

# ShowapiRequest 的第一个参数是万维易源网的url ,第二个参数是易源网上你个人的appId , 第三个参数是易源网上的密钥

r.addBodyPara("typeId", "35")  #typeId:表示识别几位数的图片验证码 ;35:'3'表示英数结合的验证码,'5'表示5位数的验证码   ; 31:一位数的验证码

r.addBodyPara("convert_to_jpg", "0")

r.addFilePara("image", setting.code_path) # 添加要识别验证码的图片

res = r.post()

print(res.text)  # {"showapi_res_error":"","showapi_res_id":"6f0e4cdb977141b293ea12178ad3d37e","showapi_res_code":0,"showapi_res_body":{"Id":"5bac83cc-5637-4e2d-bc91-25a78b527241","Result":"ANLZZ","ret_code":0}}

text = res.json()['showapi_res_body']['Result']# 以json格式读取:showapi_res_body 下 Result 的值

print(text) # 返回信息:ANLZZ (识别正确)

注:这种方式识别准确率比较高

将注册相关代码封装起来-初次封装

注册自动输入对应信息

 6、封装读取配置文件方法

新建int配置文件:

#localElement.ini文件

[RegisterElement]

user_email=id>register_email

user_email_error=id>register_email-error

user_name=id>register_nickname

user_name_error=id>register_nickname-error

password=id>register_password

password_error=id>register_password-error

code_image=id>getcode_num

code_text=id>captcha_code

code_text_error=id>captcha_code-error

register_button=id>register-btn

使用python3自带 configparser模块, 用于读取配置文件信息:

from setting.setting import config_ini_dir

import configparser

class Read_Ini(object): # 初始化

def __init__(self,node = None):

if node:

self.node = node

else:

self.node = 'RegisterElement'  # 配置文件中的某个节点

self.cf = self.load_ini()

def load_ini(self):  # 加载文件

cf = configparser.ConfigParser()  # 使用 configparser模块读取配置文件信息

cf.read(config_ini_dir)  # 配置文件所在路径

return cf

def get_value(self,key): # 获取配置文件中key的value值

data = self.cf.get(self.node,key)

return data

# if __name__ == '__main__':

#     read_init = Read_Ini()

#     print(read_init.get_value('user_name'))  # 结果:id>register_nickname

7、封装定位元素类

# find_element.py

from util.read_ini import Read_Ini

class FindElement(object):

def __init__(self,driver):

self.driver = driver

def get_element(self,key):

read_ini = Read_Ini()

data = read_ini.get_value(key)

by,value = data.split('>')

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)

elif by == 'xpath':

return self.driver.find_element_by_xpath(value)

else:

return self.driver.find_element_by_css(value)

except Exception as e:

print("find_element错误信息:",e)

return None

* 注册完整流程

1、配置文件

1)LocalElement.ini:存定位元素信息

LocalElement.ini

2)setting.py:

setting.py

3)read_ini.py:读取配置文件LocalElement.py的配置信息

read_ini.py

4)find_element.py:获取元素定位信息

find_element.py

5)register_function.py:注册测试主程序

register_function.py

selenium3与Python3实战 web自动化测试框架 ☝☝☝的更多相关文章

  1. selenium3与Python3实战 web自动化测试框架✍✍✍

    selenium3与Python3实战 web自动化测试框架  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...

  2. web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架

    基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

  3. 【python3+request】python3+requests接口自动化测试框架实例详解教程

    转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...

  4. Windows环境搭建Web自动化测试框架Watir

    Windows环境搭建Web自动化测试框架Watir 一.前言     Web自动化测试一直是一个比较迫切的问题,对于现在web开发的敏捷开发,却没有相对应的敏捷测试,故开此主题,一边研究,一边将We ...

  5. Web 自动化测试框架 sweetest 介绍

    项目开源: https://github.com/tonglei100/sweetest 文章转载:https://segmentfault.com/a/1190000011612061 介绍 swe ...

  6. Web自动化测试框架Watir(基于Ruby) - 第2章 使用Watir写自动化测试脚本

    一.先来看一个小DEMO 通过上一篇博文<Web自动化测试框架Watir(基于Ruby) - 第1章 Windows下安装与部署>的介绍,我们已经有了完整Watir运行环境,现在我们可以来 ...

  7. Web自动化测试框架Watir(基于Ruby) - 第1章 Windows下安装与部署

    一.前言 Web自动化测试一直是一个比较迫切的问题,对于现在web开发的敏捷开发,却没有相对应的敏捷测试,故开此主题,一边研究,一边将Web自动化测试应用于工作中,进而形成能够独立成章的博文,希望能够 ...

  8. web自动化测试框架总结

    web自动化测试框架总结: https://www.processon.com/mindmap/5bdab924e4b0878bf41e9e09

  9. Web自动化测试框架改进

    Web自动化测试框架(WebTestFramework)是基于Selenium框架且采用PageObject设计模式进行二次开发形成的框架. 一.适用范围:传统Web功能自动化测试.H5功能自动化测试 ...

随机推荐

  1. 项目案例模板之jdbc两种连接方式

    项目案例模板之jdbc两种连接方式 第一种连接方式 JDBCUtils.java package jdbc; ​ import org.junit.jupiter.api.Test; ​ import ...

  2. UGUI_关卡选项界面

    1.Image组件—“Source Image”,Set Native Size. 2.Image组件—“Image Type”——Sliced 编辑要放大缩小的图片,Sprite Editor,采用 ...

  3. .Net基础篇_学习笔记_第六天_for循环的嵌套_乘法口诀表

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. Python—字符串和常用数据结构

    目录 1. 字符串 2. 列表 2.1 列表的增删改查 2.2 列表的切片和排序 2.3 生成式语法 3. 元组 4.集合 5. 字典 5.1 字典的增删改查 5.2 字典的常见操作 序言:这一章我们 ...

  5. Java第二次作业第四题

    文本行输入学生姓名,下来框选择课程名称,文本行输入课程成绩:点击"录入"按钮,相关信息显示在文本区:点击"统计"按钮,将所有录入的成绩的平均成绩显示在另一个文本 ...

  6. Jmeter 接口自动化-脚本数据分离实例

    一. 背景:  为了让大家更加的了解Jmeter,并且使用起来游刃有余.这篇我们主要讲一下,如何优雅的使用Jmeter一步步的实现接口自动化,完成脚本与数据分离,把可能对Jmeter脚本的维护转移到c ...

  7. Docker Gitlab CI 部署 Spring Boot 项目

    目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...

  8. 第六届蓝桥杯java b组第二题

    立方变自身 观察下面的现象,某个数字的立方,按位累加仍然等于自身. 1^3 = 1 8^3 = 512 5+1+2=8 17^3 = 4913 4+9+1+3=17 … 请你计算包括1,8,17在内, ...

  9. SpringBootSecurity学习(01)网页版登录入门介绍

    Web应用安全管理 Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.权限管理的设计一般使用角色 ...

  10. 字符串的格式化、运算符和math函数(python中)

    一.字符串的格式化 1.字符串格式化输出 print('%s的年龄是%d' % ('小哥哥',20)) # 将每个值放在⼀个圆括号内,逗号隔开 '{0}的年龄是{1}'.format('⼩小哥哥',2 ...