Python + Selenium从基础到高级篇
本文介绍Selenium,从基础Selenium到高级篇,一步一步的教学,有python基础的一学就会。
韦爵社
喜欢请点赞加关注,更新不定期。
展开
-
Python+Selenium 跳过Cookies,登录网站
1.账号可以不用每次都登录,下次可以直接跳过登录的步骤1.先登录一次,保证Cookies是可以跳过登录的最新Cookies。2.复制Cookies文件和Local State文件3.复制到别的文件夹4.使用chrome浏览器的Options参数指定你复制到的文件夹5.再打开浏览器就可以登录成功..................原创 2022-06-16 15:55:12 · 921 阅读 · 0 评论 -
Python+Selenium 自动化框架篇11 自动化测试生成报告
本文来介绍如何生成自动化测试报告,HTMLTestRunner.py是一个能生成一个HTML格式的网页报告,我们需要在我们自动化框架里面继承一个报告输出,直接来看看效果。网盘的HTMLTestRunner文件,适合Python3链接:https://pan.baidu.com/s/11UJg-_DaNvvhMboHuasHIA 提取码:wsbd首先在根目录下创建一个 test_report 文件夹然后在测试套件TestRunner.py这个文件输入代码如下:# coding=utf-8imp原创 2022-05-02 06:06:50 · 2349 阅读 · 0 评论 -
Python+Selenium 自动化框架篇10 unittest之discover()执行脚本方法
本文来介绍,如果利用discover()方法去加载一个路径下所有的测试用例。这个方法是不是太适合我们现在的需求,例如我只需要跑testsuite包下所有测试用例,不管在里面有多少个包和多少个测试类,只需要用discover()搞定,来看看这个场景下TestRunner.py如何写。# coding = utf-8import unittestsuite = unittest.TestLoader().discover("testsuits")if __name__ == '__main__':原创 2022-05-02 05:19:24 · 1082 阅读 · 0 评论 -
Python+Selenium 自动化框架篇9 unittest之makeSuite()执行脚本方法
本文介绍利用makeSuite()方法,一次性加载一个类文件下所有测试用例到suite中去。还是利用前面一篇文章中的测试脚本,来看看TestRunner.py如何写。# coding = utf-8import unittestfrom testsuits.test_baidu_search import BaiduSearchsuite = unittest.TestSuite(unittest.makeSuite(BaiduSearch))if __name__ == '__main__原创 2022-05-02 05:15:50 · 1191 阅读 · 0 评论 -
Python+Selenium 自动化框架篇8 unittest执行脚本方法之addTest
本文开始介绍如何通过unittest来管理和执行测试用例,这一篇介绍unittest下addTest()方法来加载测试用例到测试套件中去。新建的测试脚本,test_get_page_title.py代码如下:# coding = utf-8import unittestimport timefrom framework.browser_engine import BrowserEnginefrom pageobjects.baidu_frontpage import FrontPagec原创 2022-05-02 05:09:44 · 777 阅读 · 0 评论 -
Python+Selenium 自动化框架篇7 一个类文件写多个测试固件的方法
到前面这一篇文章,简单的Python+Selenium自动化测试框架就已经算实现了。接下来的主要是介绍,unittest管理脚本,如何如何加载执行脚本,再就是采用第三方插件,实现输出html的测试报告。本文来介绍下,在同一个类中,多个测试函数时候,测试固件如何写为了说明这个问题,我们在之前的测试类test_baidu_search.py基础上,再写一个test_search2()的测试用例,看看会发生什么。# coding=utf-8import timeimport unittestfrom f原创 2022-05-02 04:58:35 · 614 阅读 · 0 评论 -
Python+Selenium 自动化框架篇6 -- 实现POM
本文进一步演示POM的具体实现,前面POM只是一个页面,一个测试脚本,现在我们要实现三个页面,两个测试脚本。在pageobjects包下,新建2个页面对象:百度新闻页,百度贴吧页,具体文件结构如下图,其他和之前项目层级结构保持不变。...原创 2022-04-27 20:14:13 · 2283 阅读 · 0 评论 -
Python+Selenium 自动化框架篇5 -- 框架内封装元素方法
前面文章,我们实现了框架的一部分功能,包括日志类和浏览器引擎类的封装,今天我们继续封装一个基类和介绍如何实现POM。关于基类,是这样定义的:把一些常见的页面操作的selenium封装到base_page.py这个类文件,以后每个POM中的页面类,都继承这个基类,这样每个页面类都有基类的方法,这个我们会在这篇文章实现。在实现封装基类里,我们实现了元素八大方式的定位和截图类封装。具体项目层级结构如下图。基类base_page.py的具体实现代码,这里就封装了几个常用方法,其他方法,你自己去练习封装原创 2022-04-27 15:34:48 · 2272 阅读 · 0 评论 -
Python+Selenium 自动化框架篇之4 - 封装日志类和浏览器引擎类到框架内
这一篇,我们介绍,如何封装自己的日志类和浏览器引擎类。相关步骤:打开PyCharm,创建如下格式的项目层级结构,文件名我保持一样;相关文件代码如下配置文件config.ini相关设计如下:# this is config file, only store browser type and server URL[browserType]#browserName = FirefoxbrowserName = Chrome#browserName = IE[testServer原创 2022-04-25 17:56:22 · 1530 阅读 · 0 评论 -
Python+Selenium 自动化框架篇之3 - POM自动化设计模型
测试框架的设计模式包括:关键字驱动、POM数据驱动实现:Excel、Yaml、Py、JSON1.POM自动化测试设计:POM全称叫做PageObjectModule,简称PO、POM,中文叫页面对象模型。POM是目前业内应用最为主流的UI自动化测试框架设计模式;在接口自动化测试中,最为主流的叫做关键字驱动。POM就是将所有页面作为对象,组合串联这些对象,实现所有测试流程的自动化。例:购买流程:登录-选择商品-添加商品属性-添加购物城-购物城中下单支付-支付成功-返回首页POM中:登录页执行登原创 2022-04-25 14:49:52 · 1783 阅读 · 0 评论 -
Python+Selenium 自动化框架篇之2-介绍unittest单元测试框架
1.unittest介绍前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等。在继续介绍框架设计之前,我们先来学习一个工具,叫unittest。unittest是一个单元测试框架,是Python编程的单元测试框架。有时候,也做叫做“PyUnit”,是Junit的Python语言版本。这里了解下,Junit是Java语言的单元测试框架,Java还有一个很好用的单元测试框架叫TestNG,本系列只学习Python,所以只需要unittest是Pyth原创 2022-04-24 17:27:47 · 951 阅读 · 0 评论 -
Python+Selenium 自动化框架篇1-什么是自动化测试框架
1.什么是自动化测试框架简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境。自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本,多种方式、平台执行脚本,良好的报告去跟踪脚本执行结果。框架具有以下一些优点:1)代码复用2)最大覆盖率3)很低成本维护4)很少人工干预5)简单报告输出2.常见的测试框架分类早期设计的框架大致可分为以下几类:1)基于模块的测试框架2)基于库(Library)结构测试框架3)数据驱动测试框架,和QTP很像4)关原创 2022-04-24 16:04:31 · 1320 阅读 · 0 评论 -
Python+Selenium 中级篇13 - 隐藏浏览器运行自动化任务
隐藏浏览器运行,大多数都是用来做一些定时任务,让系统自己在后台运行,这样就可以不用管,每天一到时间就可以查看运行结果了。觉得有用点个赞,谢谢啦原创 2022-06-10 18:11:36 · 2785 阅读 · 0 评论 -
Python+Selenium 中级篇12 -继承的使用
本文介绍一个面向对象设计领域里,很常见的一种思想,继承。继承有很多好处,常听到的一句话就是,子类能够直接使用父类的方法,这样就可以减少子类代码量。其实,在自动化测试框架设计过程中,是很有必要把继承加入到你的测试脚本中去。现在baidu目录下建一个inherit.py文件,这个就是我们的父类,里面有一个打开chrome浏览器和打开百度首页的方法。代码如下:import timefrom selenium import webdriverclass Inherit(object): def原创 2022-04-24 11:38:25 · 782 阅读 · 0 评论 -
Python+Selenium 中级篇11 - 封装一个截图方法
本文介绍把截图类方法封装到BasePage.py文件里,这个文件创建之前的二次封装方法有介绍:我们截图类写死了把截图图片保存到根目录下的Screenshots文件夹里,图片名称是当前系统时间,图片后缀名是png。# coding=utf-8import osimport timefrom test1.logger import Loggermylog = Logger(logger='BasePage').getlog()class BasePage(object): """原创 2022-04-22 20:12:32 · 418 阅读 · 0 评论 -
Python+Selenium 中级篇10 - 封装一个日志类
如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里。为什么需要日志输出呢,我们需要记录我们测试脚本到底做了什么事情,最好的办法是写事件监听。这个事件监听,对我们现在来说,还是有点复杂去理解,所以我这里,选择封装一个简单的日志类,同样达到这个效果。实施方法:在根目录下新建一个Logs的文件夹日志的保存命名,需要系统时间Python中有一个logging模块来支持我们自定义封装一个新日志类。在脚本里,初始化一个日志类的实例对象,然后去控制输出INFO还是ERROR日原创 2022-04-22 17:45:51 · 427 阅读 · 1 评论 -
Python+Selenium 中级篇之9- 获取系统时间和格式化时间显示
本篇文章介绍如何去获取和打印格式化系统时间,我们很多时候,看到一些日志,前面都会记录年月日,时分秒,甚至毫秒,然后才是日志描述。这一篇文章,介绍时间获取和格式化时间,就是为了后面,如何写一个简单的日志类做铺垫的。新建一个get_time.py文件,输入一下代码:# coding=utf-8import timeclass GetTime(object): def get_system_time(self): # print(time.localtime())原创 2022-04-15 12:08:57 · 700 阅读 · 0 评论 -
Python+Selenium 中级篇8 读取配置文件
本文来介绍下Python中如何读取配置文件。任何一个项目,都涉及到了配置文件和管理和读写,Python支持很多配置文件的读写,这里我们就介绍一种配置文件格式的读取数据,叫ini文件。Python中有一个类ConfigParser支持读ini文件。在项目下,新建一个文件夹,叫config,然后在这个文件夹下新建一个file类型的文件:config.iniconfig.ini内容:# 这是配置文件,存储浏览器类型和服务器 URL[browserType]browserName = Chrome原创 2022-04-13 19:29:52 · 335 阅读 · 0 评论 -
Python+Selenium 中级篇 7 封装一个浏览器启动类
前一篇文章我们知道了,如何去封装几个简单的Selenium方法到我们自定义的类,这次我们编写一个类,叫浏览器引擎类,通过更改一个字符串的值,利用if语句去判断和控制启动那个浏览器。我们继续在test1这个包下新建一个browser_engine.py文件,然后在另外一个包下新建一个test.py文件去测试这个浏览器引擎类是否工作正常。browser_engine.py中的代码:# coding=utf-8from selenium import webdriverclass BrowserEng原创 2022-04-12 20:25:59 · 694 阅读 · 0 评论 -
Python+Selenium 中级篇 6- 二次封装Selenium中的方法
本文来介绍,如何把常用的几个webdriver的方法封装到自己写的一个类中去,这个封装过程叫二次封装Selenium方法。我们把打开站点,浏览器前进和后退,关闭和退出浏览器这这个方法封装到一个新写的类中去。我们按照如下层次结构在PyCharm中新建两个包和两个.py文件这里提一下,python中默认规则,包名和文件名都是小写,类名称单词首字母大写,函数名称小写,多个字母下划线隔开。我们尽量遵守下这个不成文的约定。basepage.py的内容:# coding=utf-8class BasePa原创 2022-04-12 19:35:58 · 508 阅读 · 0 评论 -
Python 中级篇5 -- 静态方法@staticmethod
静态方法在开发时,如果需要在类 中封装一个方法,这个方法:1.既不需要访问 实例属性 或者调用 实例方法2.也不需要访问 类属性 或者调用 类方法这个时候,可以吧这个方法封装成一个 静态方法class Cat(): @staticmethod def cat(): print("这是一个静态方法")Cat.cat()静态方法也是可以直接使用类名. 直接调用...原创 2022-04-02 15:13:28 · 4070 阅读 · 0 评论 -
python 中级篇4 -- 操作mysql数据库
本文介绍 pymysql 连接 Mysql 数据库进行测试:命令行安装命令pip install pymysql相关代码如下:1.创建表方法def SelectPlanInfo(): conn = pymysql.connect( host="172.0.0.1", # IP port=3308, # 端口号 user="root",password="123456", # 账号、密码 database="test", #原创 2022-04-02 11:48:39 · 4977 阅读 · 0 评论 -
Python 中级遍 3 -- 类方法@classmethod
类方法 就是针对 类对象的方法在 类方法 的内部可以直接访问 类属性 或者调用其他的类方法class Tool: count = 10 @classmethod def kind(cls): print("这是 %s 个类方法" % cls.count) def __init__(self): print("这是初始化方法")Tool.kind()输出结果:这是 10 个类方法类方法不用创建对象就可以直接调用这样就可以不调用初原创 2022-04-01 18:10:12 · 490 阅读 · 0 评论 -
python 中级遍2 -- __del__ 方法
__del__方法如果想在对象销毁前,再做一些事情,可以考虑使用 __del__方法1,当使用 类名()创建对象时,为对象分配完空间后,自动调用__init__方法2.当一个 对象呗从内存中销毁钱,会自动调用 __del__方法代码如下:class Method: def __init__(self,name): print("这是初始化方法") # self.属性名 = 属性的初始值 self.name = name def _原创 2022-04-01 16:16:25 · 1470 阅读 · 0 评论 -
python 中级遍1 - __init__初始化方法
在 Python 的类中,有一种特殊的方法——初始化方法。它的格式是 def init(self):,方法名由 init(initialize 的缩写,初始化的意思)加左右两边的 双下划线 组成。1.__init__初始化方法当使用 类名()创建对象时,对自动执行以下操作:1.为对象在内存中 分配空间 ---- 创建对象2.为对象的属性 设置初始值 ---- 初始方法(init)这个 初始化方法 就是 init 方法 init 是对象的* 内置方法*init 方法是 专门 用来定义一个类原创 2022-04-01 16:07:47 · 1310 阅读 · 0 评论 -
Python+Selenium 基础篇之19 CSS选择器,超好用
css选择器我补上,这个当你做起项目来,你一定会用到,真的很好用原创 2022-06-07 11:49:36 · 1472 阅读 · 0 评论 -
Python+Selenium基础篇18 最新的获取元素方法
因为获取的元素方法更新了,我在这里记录一下from selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()# driver.maximize_window()driver.implicitly_wait(10)driver.get("https://www.baidu.com")driver.find_element(By.ID,"kw").send_ke原创 2022-04-12 19:08:56 · 1053 阅读 · 0 评论 -
Python+Selenium基础篇之17 - 爬取的数据导出excel表格
这章我们介绍一下自动化获取到的数据如何导出excel表格相关代码如下:# coding=utf-8import xlwtimport timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.baidu.com/')time.sleep(1)workbook = xlwt.Workbook(encoding='utf-8') #创建workbook对象worksheet =原创 2022-04-01 11:30:00 · 2691 阅读 · 0 评论 -
Python+Selenium基础篇之16-如何截图并保存
本文介绍如何利用Selenium的方法进行截图,在测试过程中,是有必要截图,特别是遇到错误的时候进行截图实例,截取全屏和只截取百度一下代码如下:# coding=utf-8import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.baidu.com/')time.sleep(1)# 全屏截图方法driver.get_screenshot_as_file(r'原创 2022-04-01 11:00:00 · 928 阅读 · 0 评论 -
Python+Selenium基础篇之15-获取页面某个元素的全部属性
本文来介绍如何通过Selenium获取页面元素的某一个属性。一个元素可能有多个属性,例如 class, id, name, text, href, vale等等。相关脚本代码如下:# coding=utf-8import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.baidu.com/')time.sleep(1)for link in driver.find_e原创 2022-03-31 12:15:50 · 1222 阅读 · 0 评论 -
Python+Selenium基础篇之14-获取当前页面全部图片信息
本文来介绍下如何获取当前页面全部的图片信息,图片信息可能包括,图片名称,图片大小等。相关脚本代码如下:# coding=utf-8import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get('https://tieba.baidu.com/index.html')time.sleep(1)# 循环所有后缀为‘img’的图片,并打印输出图片信息、名称,图片大小for image in dri原创 2022-03-31 11:43:41 · 1914 阅读 · 0 评论 -
Python+Selenium基础篇之13 -获取元素上面的文字
如何通过Selenium方法来获取某一个元素的text属性值。在很多自动化测试脚本中,需要多次获取元素的text值,拿过来进行对比和匹配。判断登录键文字代码如下:# coding=utf-8import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get('https://www.baidu.com')time.sleep(1)error_mes = driver.find_element_b原创 2022-03-31 11:36:07 · 3569 阅读 · 0 评论 -
Python+Selenium基础篇之12-自定义浏览器窗口大小
设置符合不同测试场景浏览器窗口大小测试脚本代码如下:# coding=utf-8import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.maximize_window() # 全屏driver.get('https://www.baidu.com')time.sleep(1)print(driver.get_window_size())driver.set_window_size(1280原创 2022-03-30 19:28:22 · 3460 阅读 · 0 评论 -
Python+Selenium基础篇之11 - 浏览器前进和后退操作
介绍如何,利用webdriver中的方法来演示浏览器中地址栏旁边的前进和后退功能。脚本代码如下:# coding=utf-8import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.maximize_window() # 最大化浏览器driver.implicitly_wait(8) # 设置隐式时间等待driver.get("https://www.baidu.com")time.sle原创 2022-03-30 17:44:41 · 3172 阅读 · 0 评论 -
Python+Selenium基础篇之10 刷新页面方法
本文介绍如何调用webdriver中刷新页面的方法。脚本代码如下:# coding=utf-8import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.maximize_window() # 最大化浏览器driver.implicitly_wait(8) # 设置隐式时间等待driver.get("https://www.baidu.com")time.sleep(2)driver.re原创 2022-03-30 17:40:36 · 9367 阅读 · 4 评论 -
Python+Selenium-基础篇9 之弹出对话框点击
1.Alert 弹出框Alert 弹出框,目的就是显示通知信息,只需用户看完信息后,点击 OK(确定) 就可以了。# coding=utf-8import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.maximize_window() # 最大化浏览器driver.implicitly_wait(8) # 设置隐式时间等待driver.get("http://cdn1.python3.vip原创 2022-02-16 15:57:24 · 2233 阅读 · 0 评论 -
Python+Selenium-基础篇8 之切换iframe
切iframe1.切到frame中(switch_to.frame())关于iframe的网址,我也没有找到,就拿个代码片演示吧这个 iframe 元素非常的特殊, 在html语法中,frame 元素 或者iframe元素的内部 会包含一个 被嵌入的 另一份html文档。在我们使用selenium打开一个网页是, 我们的操作范围 缺省是当前的 html , 并不包含被嵌入的html文档里面的内容。如果我们要 操作 被嵌入的 html 文档 中的元素, 就必须 切换操作范围 到 被嵌入的文档中。原创 2022-02-14 19:02:47 · 1194 阅读 · 0 评论 -
Python+Selenium-基础篇7 之窗口切换
切换 窗口 方法本文来介绍如何处理driver在多窗口之间切换,想一下这样的场景,在页面A点击一个连接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来的脚本是操作页面B的元素,这样就造成了找不到元素的报错。本来介绍selenium中switch_to.window()方法来处理这个问题。测试场景:打开百度页面(页面A),点击新闻按键,会在第二个窗口打开这个新闻的具体详情页(页面B),在新窗口找到输入框输入。我们点击新闻界面会跳转到另一个界面,然后我们继续找到原创 2022-02-14 17:17:22 · 2890 阅读 · 0 评论 -
Python+Selenium-基础篇6 之断言方法,清除文本方法,设置等待时长方法
判断元素方法# coding=utf-8import time # 这是等待时间需要导入的包from selenium import webdriverdriver = webdriver.Chrome()driver.maximize_window() # 最大化浏览器driver.implicitly_wait(8) # 设置隐式时间等待driver.get("https://www.baidu.com") # 打开的网址driver.find_element_by_xpat原创 2022-02-14 14:52:21 · 568 阅读 · 0 评论 -
Python+Selenium 基础篇5 之输入和点击方法
输入方法# coding=utf-8from selenium import webdriverdriver = webdriver.Chrome()driver.maximize_window() # 最大化浏览器driver.implicitly_wait(8) # 设置隐式时间等待driver.get("https://www.baidu.com") # 打开的网址driver.find_element_by_xpath('//*[@id="kw"]').send_keys原创 2022-02-14 14:30:15 · 935 阅读 · 0 评论