学习目的:

掌握自动化框架中需要的一些基础web操作

正式步骤:

使用title_contains检查页面是否正确


# -*-  coding:utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC dr = webdriver.Chrome()
url = "https://www.baidu.com"
dr.get(url)
#校验title是否包含校验的内容
a = EC.title_contains("百度一下,你就知道")
#如果包含括号内的内容,则会打印
if a:
print("title正确")
time.sleep(3)
dr.close()

使用Expected_conditions判断元素是否可见


# -*-  coding:utf-8 -*-

import time
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 url = "http://www.5itest.cn/register"
dr = webdriver.Chrome()
dr.get(url)
time.sleep(3)
EC.title_contains("注册") #注册输入操作,如果用element直接传参到WebDriverWait会报错,提示需要传入一个可迭代对象,而不是webelement,所以传入locator
element = dr.find_element_by_xpath('//*[@id="register_email"]')
locator = (By.XPATH,'//*[@id="register_email"]')
WebDriverWait(dr,10).until(EC.visibility_of_element_located(locator))
element.send_keys("111@163.com") time.sleep(3)
dr.close()

获取定位的标签属性或者输入的内容


# -*-  coding:utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC url = "http://www.5itest.cn/register"
dr = webdriver.Chrome()
dr.get(url)
time.sleep(3)
EC.title_contains("注册") email_element = dr.find_element_by_xpath('//*[@id="register_email"]')
#打印定位了email的标签其他元素属性
print(email_element.get_attribute("placeholder"))
email_element.send_keys("test@163.com")
#获取输入的内容,查看是否输入正确
text = email_element.get_attribute("value")
assert text == "test@163.com" time.sleep(1)
dr.quit()

随机生成数据:用户名、邮箱账号


# -*-  coding:utf-8 -*-
import random
import time
from selenium import webdriver url = "http://www.5itest.cn/register"
dr = webdriver.Chrome()
dr.get(url)
time.sleep(3)
#Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
data_email = ''.join(random.sample("123456789abcdefg",6))+'@163.com'
data_name = ''.join(random.sample("AaBbCcDdEeFf",4))
dr.find_element_by_xpath('//*[@id="register_email"]').send_keys(data_email)
dr.find_element_by_xpath('//*[@id="register_nickname"]').send_keys(data_name)
time.sleep(3)
dr.close()

解决验证码--获取验证码图片


# -*-  coding:utf-8 -*-

import time
import random
from PIL import Image
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait url = "http://www.5itest.cn/register"
dr = webdriver.Chrome()
dr.get(url)
dr.maximize_window()
time.sleep(3)
element_email = dr.find_element_by_xpath('//*[@id="register_email"]')
elemant_name = dr.find_element_by_xpath('//*[@id="register_nickname"]')
elemant_pwd = dr.find_element_by_xpath('//*[@id="register_password"]')
data_email = ''.join(random.sample('asdzxc123456',6))
data_name = ''.join(random.sample('BNMGHJ',4))
locator = (By.XPATH,'//*[@id="register_email"]')
WebDriverWait(dr,10).until(EC.visibility_of_element_located(locator))
element_email.send_keys(data_email+'@163.com')
elemant_name.send_keys(data_name)
elemant_pwd.send_keys('') #图片处理
dr.save_screenshot(r"F:\python_stack\python_autotest\num.png")
element_code = dr.find_element_by_xpath('//*[@id="getcode_num"]')
print(element_code.location)
code_left = element_code.location['x']
code_top = element_code.location['y']
code_right = element_code.size['width']+code_left
code_bottom = element_code.size['height'] + code_top
#打开页面的截图
im = Image.open("F:/python_stack/python_autotest/num.png")
#根据上下左右的坐标,来截取验证码图片
img = im.crop((code_left,code_top,code_right,code_bottom))
img.save("F:/python_stack/python_autotest/num_code.png") time.sleep(3)
dr.close()

从验证码图片获取验证码


import pytesseract
from PIL import Image img = Image.open("F:/python_stack/python_autotest/num_code.png")
text = pytesseract.image_to_string(img)
print(text)

PS:

如果报错:tesseract is not installed or it's not in your path

请自己下载一个Tesseract-OCR

可以参考:https://blog.csdn.net/qq_42184699/article/details/92575404

重构封装读取配置文件方法


配置文件内容:

[RegisterElement]
element_email=id>register_email
elemant_name=id>register_nickname
elemant_pwd=id>register_password
[/RegisterElement]

读取配置文件代码:

# -*-  coding:utf-8 -*-
'''
pip install Configparser 安装参数解析读取的包
''' import configparser class ReadIni(object):
def __init__(self,filename = None,node= None):
if filename == None:
filename = "F:/python_stack/python_autotest/config/LocalElement.ini"
if node == None:
self.node = "RegisterElement"
else:
self.node = node
self.cf = self.load_ini(filename)
#加载文件
def load_ini(self,filename):
cf = configparser.ConfigParser()
cf.read(filename)
return cf
#获取value值
def get_value(self,key):
data = self.cf.get(self.node,key)
return data if __name__ == "__main__":
test = ReadIni()
print(test.get_value("elemant_pwd"))

封装定位元素类 : find_elemnet.py


# -*-  coding:utf-8 -*-
from util.ReadIni import ReadIni
from selenium import webdriver class FindElement(object):
def __init__(self, driver):
self.driver = driver def get_element(self, key):
readini = ReadIni()
data = readini.get_value(key)
by = data.split(">")[0]
# print(by)
value = data.split(">")[1]
# print(value)
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_className(value)
else:
return self.driver.find_element_by_xpath(value)
except:
return None if __name__ == "__main__":
driver = webdriver.Chrome()
test = FindElement(driver)
test.get_element("element_email")

  

页面注册方法封装示例


# -*-  coding:utf-8 -*-
from util.find_elemnet import FindElement
from selenium import webdriver class RegisterFunction(object):
def __init__(self,url):
self.driver = self.get_driver(url) #获取driver,并打开网页
def get_driver(self,url):
driver = webdriver.Chrome()
driver.get(url)
driver.maximize_window()
return driver #输入用户信息
def send_user_info(self,key,data):
self.get_user_element(key).send_keys(data) #定位用户的各个element,find_element为find_element.py的实例,然后把实例化的self.driver传入
#然后find_element就可以正常定位
def get_user_element(self,key):
find_element = FindElement(self.driver)
user_element = find_element.get_element(key)
return user_element def main(self):
self.send_user_info("element_email","test@163.com")
self.send_user_info("elemant_name","admin")
self.send_user_info("elemant_pwd", "") if __name__ == "__main__":
url = "http://www.5itest.cn/register"
register = RegisterFunction(url)
register.main()

总结:

页面的常用方法建议本地建立一个方法库表格,后续直接参考,这个是后续要写的

selenium3 web自动化测试框架 二:页面基础操作、元素定位方法封装、页面操作方法封装的更多相关文章

  1. selenium3 web自动化测试框架 三:项目实战中PO模型的设计与封装

    po模型设计思想 Page Object 模式主要是将每个页面设计为一个class,其中包含页面中的需要测试的元素(按钮,输入框,标题等),这样在Selenium测试页面中可以通过调取页面类来获取页面 ...

  2. selenium3 web自动化测试框架 五: 数据驱动简介及基础使用

    1.数据驱动概述 相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为完全分离,这样的测试脚本设计模式称为数据驱动.简单的理解为数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使 ...

  3. selenium3 web自动化测试框架 四:Unittest介绍及项目实战中的运用

    unittest介绍及运用,可以参考之前写的文章,除了未结合web自动化演示,基础知识都有了 https://www.cnblogs.com/wuzhiming/p/8858305.html unit ...

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

    selenium3与Python3实战 web自动化测试框架 selenium3与Python3实战 web自动化测试框架 学习 教程 一.环境搭建 1.selenium环境搭建 Client: py ...

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

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

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

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

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

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

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

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

  9. Web自动化测试框架-PO模式

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

随机推荐

  1. MFC消息路由

    1.Command Routing(命令传递):当消息进来时,会有一个泵推动它前进.消息如何进来,以有泵函数如何推动,都是属于windows程序设计的范畴, 消息如果是从子类流向父类(纵向流动),那么 ...

  2. this关键词详解

    当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this. 因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this ...

  3. django-rest-framework --- 基础简介

    目录 drf知识点 --- 后台 django restframework介绍 drf框架安装 接口 接口组成 如何写接口 接口组成的两大部分 接口文档 Postman接口工具使用 基于resrful ...

  4. python原生操作mysql

    import pymysql HOST = '127.0.0.1' PORT = 3306 USER = 'root' PASSWD = ' DB = 'test' CHARSET = 'utf8' ...

  5. SP703 SERVICE - Mobile Service

    思路:DP 提交:1次 题解: 我们把处理到的要求作为阶段. \(f[i][x][y][z]\)表示第 \(i\) 个要求,三个人分别的位置. 发现这样有很多无用状态,因为显然在第 \(i\) 个要求 ...

  6. 【题解】间隔排列-C++

    题目Description小Q是班长.在校运动会上,小Q班要进行队列表演.小Q要选出2*N名同学编队,每人都被编上一个号,每一个从1到N的自然数都被某2名同学佩戴,现在要求将他们排成一列,使两个编号为 ...

  7. vue编辑、新增弹框(引用外部页面)

    vue编辑.新增弹框(引用外部页面) 2018年06月15日 09:37:20 会飞的猪biubiu 阅读数 10265    版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...

  8. python写爬虫遇到需要解码js一些记录

    js在线格式化网站 https://beautifier.io/ Python 执行 JS 代码 NodeJS 安装方式 先解决 JS 环境,这里推荐安装 Node.js ,安装方便,执行效率也高. ...

  9. ftp、sftp、vsftp、vsftpd、lftp以及一些网络客户端工具命令

    ftp 是File Transfer Protocol的缩写,文件传输协议,用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式.它属于网络传输协议的应用层.了解更多ftp lftp :是一个 ...

  10. JavaWeb_(Mybatis框架)输入和输出参数_五

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...