摘要: 3.14 unittest之skip 前言当测试用例写完后,有些模块有改动时候,会影响到部分用例的执行,这个时候我们希望暂时跳过这些用例。或者前面某个功能运行失败了,后面的几个用例是依赖于这个功能的用例,如果第一步就失败了,后面的用例也就没必要去执行了,直接跳过就行,节省用例执行时间。一、skip装 阅读全文
posted @ 2018-06-14 17:40 lunvo 阅读(202) 评论(0) 推荐(0)
摘要: 3.13 练习题4:邮件发送(smtp) 前言本篇总结了QQ邮箱和163邮箱发送邮件,邮件包含html中文和附件,可以发给多个收件人,专治各种不行,总之看完这篇麻麻再也不用担心我的邮件收不到了。以下代码兼容python2和python3,运行无异常,放心大胆食用。 一、163邮箱1.先导入smtpl 阅读全文
posted @ 2018-06-14 17:39 lunvo 阅读(474) 评论(0) 推荐(0)
摘要: 3.12 练习题3:异常后截图 前言在执行用例过程中由于是无人值守的,用例运行报错的时候,我们希望能对当前屏幕截图,留下证据。在写用例的时候,最后一步是断言,可以把截图的动作放在断言这里,那么如何在断言失败后截图呢? 一、截图方法1.get_screenshot_as_file(self, file 阅读全文
posted @ 2018-06-14 17:38 lunvo 阅读(296) 评论(0) 推荐(0)
摘要: 3.9 run_main.py源码(兼容python2和3) 以下代码在python2和python3上都跑通过,python3只需注释掉上面红色框框区域代码就行(最后一步发送邮箱代码,我注释掉了)。 阅读全文
posted @ 2018-06-14 17:37 lunvo 阅读(725) 评论(0) 推荐(0)
摘要: 3.10 练习题1:模块导入(登录方法) 以登录博客园为案例https://passport.cnblogs.com/user/signin一、登录方法封装1.我们可以把登录写成一个登录类,里面写个登录的方法,保存文件为login_pub.py 2.调用登录公共方法 阅读全文
posted @ 2018-06-14 17:37 lunvo 阅读(264) 评论(0) 推荐(0)
摘要: 3.11 练习题2:捕获异常 前言在定位元素的时候,经常会遇到各种异常,为什么会发生这些异常,遇到异常又该如何处理呢?本篇通过学习selenium的exceptions模块,了解异常发生的原因。一、发生异常1.打开博客首页,定位“新随笔”元素,此元素id="blog_nav_newpost"2.为了 阅读全文
posted @ 2018-06-14 17:37 lunvo 阅读(216) 评论(0) 推荐(0)
摘要: 3.7 unittest之断言 前言在测试用例中,执行完测试用例后,最后一步是判断测试结果是pass还是fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言(assert)。用unittest组件测试用例的时候,断言的方法还是很多的,下面介绍几种常用的断言方法:assertEqual、a 阅读全文
posted @ 2018-06-14 17:36 lunvo 阅读(310) 评论(0) 推荐(0)
摘要: 3.8 搭建简易项目 前言到unittest这里基本上可以搭建一个简易的项目框架了,我们可以用一条run_main.py脚本去控制执行所有的用例,并生成报告,发送邮件一系列的动作 一、新建工程1.打开pycharm左上角File>New Project,在Location位置输入项目名称:D:\te 阅读全文
posted @ 2018-06-14 17:36 lunvo 阅读(176) 评论(0) 推荐(0)
摘要: 3.6 html报告乱码问题优化 前言python2用HTMLTestRunner生成测试报告时,有中文输出情况会出现乱码,这个主要是编码格式不统一,改下编码格式就行。下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 一、中文乱码1.测 阅读全文
posted @ 2018-06-14 17:35 lunvo 阅读(205) 评论(0) 推荐(0)
摘要: 3.5 unittest生成测试报告HTMLTestRunner 前言批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的。unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTestRunner备注:(以下是pyt 阅读全文
posted @ 2018-06-14 17:33 lunvo 阅读(484) 评论(0) 推荐(0)
摘要: 3.4 unittest之装饰器(@classmethod) 前言前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间。于是就想是不是可以只打开一次浏览器,执行完用例再关闭呢?这就 阅读全文
posted @ 2018-06-14 17:29 lunvo 阅读(1520) 评论(0) 推荐(0)
摘要: 3.3 unittest批量执行 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到unittet里面的discover方法来加载用例了。加载用例后,用unittest里面的TextTestRunner这里类的run方法去一次执行多个脚本的用例。 一、新建 阅读全文
posted @ 2018-06-14 17:18 lunvo 阅读(347) 评论(0) 推荐(0)
摘要: 3.2 unittest执行顺序 前言很多初学者在使用unittest框架时候,不清楚用例的执行顺序到底是怎样的。对测试类里面的类和方法分不清楚,不知道什么时候执行,什么时候不执行。本篇通过最简单案例详细讲解unittest执行顺序。 一、案例分析1.先定义一个测试类,里面写几个简单的case 二、 阅读全文
posted @ 2018-06-14 17:14 lunvo 阅读(293) 评论(0) 推荐(0)
摘要: 3.1 unittest简介 前言 熟悉java的应该都清楚常见的单元测试框架Junit和TestNG。python里面也有单元测试框架-unittest,相当于是一个python版的junit。python里面的单元测试框架除了unittest,还有一个pytest框架,这个用的比较少,后面有空再 阅读全文
posted @ 2018-06-14 16:56 lunvo 阅读(200) 评论(0) 推荐(0)
摘要: 1.6 selenium3+firefox环境搭建 有不少小伙伴在安装selenium环境后启动firefox报错,因为现在selenium升级到3.0了,跟2.0的版本还有有一点区别的。(备注:这里不建议大家用selenium3,坑太多,如果selenium2实在用不了,那就看这篇吧)安装环境过程 阅读全文
posted @ 2018-06-14 15:18 lunvo 阅读(185) 评论(0) 推荐(0)
摘要: 1.5 pycharm使用 前言 在写脚本之前,先要找个顺手的写脚本工具。python是一门解释性编程语言,所以一般把写python的工具叫解释器。写python脚本的工具很多,小编这里就不一一列举的,只要自己用着顺手就可以的,如果你还没有选好解释器,小编这里推荐pycharm。 在安装pychar 阅读全文
posted @ 2018-06-14 15:16 lunvo 阅读(156) 评论(0) 推荐(0)
摘要: 1.2 pip降级selenium3.0 selenium版本安装后启动Firefox出现异常:'geckodriver' executable needs to be in PATHselenium默默的升级到了3.0,然而网上的教程都是基于selenium2的,最近有不少小伙伴踩坑了,决定有必要 阅读全文
posted @ 2018-06-14 15:15 lunvo 阅读(225) 评论(0) 推荐(0)
摘要: 1.3 解决pip使用异常问题 1.3.1 pip出现异常有一小部分童鞋在打开cmd输入pip后出现下面情况:Didnot provide a command Did not provide a command?这是什么鬼? 正常情况应该是酱紫 1.3.2 解决办法1.pip是一个.exe的可执行文 阅读全文
posted @ 2018-06-14 15:15 lunvo 阅读(231) 评论(0) 推荐(0)
摘要: 1.4 Chrome浏览器 前言selenium2启动Chrome浏览器是需要安装驱动包的,但是不同的Chrome浏览器版本号,对应的驱动文件版本号又不一样,如果版本号不匹配,是没法启动起来的。 #############最佳环境搭配#####################小编环境:seleniu 阅读全文
posted @ 2018-06-14 15:15 lunvo 阅读(187) 评论(0) 推荐(0)
摘要: 1.1 环境搭建 1.1.1 selenium简介Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用多个编程语言编写测试,并且 Selenium 能够在一个或多个浏览器中执行这些测试。Selenium的发展经历了三个阶段 阅读全文
posted @ 2018-06-14 15:14 lunvo 阅读(133) 评论(0) 推荐(0)
摘要: 2.33 定位的坑:class属性有空格 前言有些class属性中间有空格,如果直接复制过来定位是会报错的InvalidSelectorException: Message:The given selector u-label f-dn is either invalid or does not r 阅读全文
posted @ 2018-06-14 15:13 lunvo 阅读(2464) 评论(0) 推荐(0)
摘要: 2.34 jquery定位(简直逆天) 前言元素定位可以说是学自动化的小伙伴遇到的一道门槛,学会了定位也就打通了任督二脉,前面分享过selenium的18般武艺,再加上五种js的定位大法。这些还不够的话,今天再分享一个定位神器jquery,简直逆天了! 一、jquery搜索元素1.按F12进控制台2 阅读全文
posted @ 2018-06-14 15:13 lunvo 阅读(340) 评论(0) 推荐(0)
摘要: 2.32 js几种定位方法总结 前言本篇总结了几种js常用的定位元素方法,并用js点击按钮,对input输入框输入文本 一、以下总结了5种js定位的方法除了id是定位到的是单个element元素对象,其它的都是elements返回的是list对象1.通过id获取document.getElement 阅读全文
posted @ 2018-06-14 15:12 lunvo 阅读(28509) 评论(0) 推荐(2)
摘要: 2.30 练习题2:定位百度-更多产品 练习题2:定位百度首页上更多产品里面的‘全部产品’ 参考代码 阅读全文
posted @ 2018-06-14 15:11 lunvo 阅读(215) 评论(0) 推荐(0)
摘要: 2.31 练习题3:获取百度联系词 前言本篇以百度输入框输入关键字匹配后,打印出联想词汇。 一、定位输入框联想词1.首先在百度输入框输入关键词,如:博客,然后输入框下方会自动匹配出关键词。2.这时候可以用firebug工具定位到联想出来的词,可以看到下方匹配出来的词都有共同的class属性,这时候就 阅读全文
posted @ 2018-06-14 15:11 lunvo 阅读(141) 评论(0) 推荐(0)
摘要: 2.28 查看webdriver API(带翻译) 前言 前面都是点点滴滴的介绍selenium的一些api使用方法,那么selenium的api到底有多少呢?本篇就教大家如何去查看selenium api,不求人,无需伸手找人要,在自己电脑就有。 pydoc是Python自带的模块,主要用于从py 阅读全文
posted @ 2018-06-14 15:10 lunvo 阅读(595) 评论(0) 推荐(1)
摘要: 2.29 练习题1:去掉页面动态窗 我们在浏览网页时经常会碰到各种花样的弹窗,在做UI自动化测试的时候势必要处理这些弹窗,这里就介绍一下目前前端界两种弹窗的处理方法。一、alert弹窗 这种弹窗是最简单的一种,Selenium里有自带的方法来处理它,用switch_to.alert先定位到弹窗,然后 阅读全文
posted @ 2018-06-14 15:10 lunvo 阅读(282) 评论(0) 推荐(0)
摘要: 2.26 js解决click失效问题 前言有时候元素明明已经找到了,运行也没报错,点击后页面没任何反应。这种问题遇到了,是比较头疼的,因为没任何报错,只是click事件失效了。本篇用2种方法解决这种诡异的点击事件失效问题一、遇到的问题1.在练习百度的搜索设置按钮时,点保存设置按钮,alert弹出没弹 阅读全文
posted @ 2018-06-14 15:09 lunvo 阅读(2962) 评论(0) 推荐(0)
摘要: 2.27 18种定位方法总结 前言江湖传言,武林中流传八种定位,其中xpath是宝刀屠龙,css是倚天剑。除了这八种,其实还有十种定位方法,眼看就快失传了,今天小编让失传已久的定位方法重出江湖! 一、十八种定位方法 前八种是大家都熟悉的,经常会用到的 1.id定位:find_element_by_i 阅读全文
posted @ 2018-06-14 15:09 lunvo 阅读(526) 评论(0) 推荐(0)
摘要: 2.24 js处理内嵌div滚动条 前言 前面有篇专门用js解决了浏览器滚动条的问题,生活总是多姿多彩,有的滚动条就在页面上,这时候又得仰仗js大哥来解决啦。一、内嵌滚动条 1.下面这张图就是内嵌div带有滚动条的样子,记住它的长相。 2.页面源码如下:(老规矩:copy下来,用文本保存下来,后缀改 阅读全文
posted @ 2018-06-14 15:08 lunvo 阅读(1341) 评论(0) 推荐(0)
摘要: 2.25 js处理多窗口 前言在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解:Selenium2+python自动化13-多窗口、句柄(handle)),这样在多个窗口之间来回切换比较复杂,那么有没有办法让新打开的链接在一个窗口打开呢?要解决这个问题,得从html源码上找到 阅读全文
posted @ 2018-06-14 15:08 lunvo 阅读(336) 评论(0) 推荐(0)
摘要: 2.21 JS处理滚动条 前言 selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了。常见场景:当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的。这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。滚动条是无法直接用定 阅读全文
posted @ 2018-06-14 15:07 lunvo 阅读(339) 评论(0) 推荐(0)
摘要: 2.22 JS处理富文本 前言 <富文本>这篇解决了富文本上iframe问题,其实没什么特别之处,主要是iframe的切换,本篇讲解通过js的方法处理富文本上iframe的问题一、加载配置 1.打开博客园写随笔,首先需要登录,这里为了避免透露个人账户信息,我直接加载配置文件,免登录了。 不懂如何加载 阅读全文
posted @ 2018-06-14 15:07 lunvo 阅读(602) 评论(0) 推荐(0)
摘要: 2.23 js处理日历控件(修改readonly属性) 前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题。 基本思路:先用js去掉readonly属性,然后直接输入日期 阅读全文
posted @ 2018-06-14 15:07 lunvo 阅读(860) 评论(0) 推荐(0)
摘要: 2.20 绕过验证码(add_cookie) 前言验证码这种问题是比较头疼的,对于验证码的处理,不要去想破解方法,这个验证码本来就是为了防止别人自动化登录的。如果你能破解,说明你们公司的验证码吗安全级别不高,那就需要提高级别了。对于验证码,要么是让开发在测试环境弄个万能的验证码,如:1234,要么就 阅读全文
posted @ 2018-06-14 15:06 lunvo 阅读(355) 评论(0) 推荐(0)
摘要: 2.19 cookie相关操作 前言虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录。登录后换账号登录时候,也可作为后置条件去删除cookie然后下个账号登录一、获取cookies:get_cookies()1.获 阅读全文
posted @ 2018-06-14 15:06 lunvo 阅读(123) 评论(0) 推荐(0)
摘要: 2.18 爬页面源码(page_source) 前言有时候通过元素的属性的查找页面上的某个元素,可能不太好找,这时候可以从源码中爬出想要的信息。selenium的page_source方法可以获取到页面源码。一、page_source1.selenium的page_source方法可以直接返回页面源 阅读全文
posted @ 2018-06-14 15:05 lunvo 阅读(1494) 评论(0) 推荐(0)
摘要: 2.17 获取元素属性 前言通常在做断言之前,都要先获取界面上元素的属性,然后与期望结果对比。本篇介绍几种常见的获取元素属性方法。一、获取页面title1.有很多小伙伴都不知道title长在哪里,看下图左上角。 2.获取title方法很简单,直接driver.title就能获取到。 二、获取元素的文 阅读全文
posted @ 2018-06-14 15:05 lunvo 阅读(202) 评论(0) 推荐(0)
摘要: 2.16-1 非input文件上传(SendKeys) 前言不少小伙伴问非input标签如何上传文档,这个本身就是一坑,无奈很多小伙伴非要跳坑里去,那就介绍一个非主流的上传文件方法吧,用第三方库SendKeys. 一、SendKeys安装1.pip安装SendKeys>pip install Sen 阅读全文
posted @ 2018-06-14 15:05 lunvo 阅读(156) 评论(0) 推荐(0)
摘要: 2.15 富文本(richtext) 前言 富文本编辑框是做web自动化最常见的场景,有很多小伙伴不知从何下手,本篇以博客园的编辑器为例,解决如何定位富文本,输入文本内容一、加载配置 1.打开博客园写随笔,首先需要登录,这里为了避免透露个人账户信息,我直接加载配置文件,免登录了。 二、打开编辑界面 阅读全文
posted @ 2018-06-14 15:04 lunvo 阅读(880) 评论(0) 推荐(0)
摘要: 2.12 单选框和复选框(radiobox、checkbox) 本篇主要介绍单选框和复选框的操作一、认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的;下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了,可以先抽他了。二、radio和che 阅读全文
posted @ 2018-06-14 15:03 lunvo 阅读(4444) 评论(0) 推荐(0)
摘要: 2.13 table表格定位 前言 在web页面中经常会遇到table表格,特别是后台操作页面比较常见。本篇详细讲解table表格如何定位。一、认识table 1.首先看下table长什么样,如下图,这种网状表格的都是table 2.源码如下:(用txt文本保存,后缀改成html) 二、table特 阅读全文
posted @ 2018-06-14 15:03 lunvo 阅读(378) 评论(0) 推荐(0)
摘要: 2.14 加载Firefox配置(略,已在2.1.8讲过,请查阅2.1.8节课) 回到顶部 2.14-1 加载Chrome配置 一、加载Chrome配置chrome加载配置方法,只需改下面一个地方,username改成你电脑的名字(别用中文!!!) 二、Wap测试1.做Wap测试的可以试下,伪装成手 阅读全文
posted @ 2018-06-14 15:03 lunvo 阅读(161) 评论(0) 推荐(0)
摘要: 2.11 alert\confirm\prompt 前言 不是所有的弹出框都叫alert,在使用alert方法前,先要识别出到底是不是alert。先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决。alert\confirm\prompt弹出框操作主要方法有:text:获取文本值acce 阅读全文
posted @ 2018-06-14 15:02 lunvo 阅读(192) 评论(0) 推荐(0)
摘要: 2.10 select下拉框 本篇以百度设置下拉选项框为案例,详细介绍select下拉框相关的操作方法。 一、认识select 1.打开百度-设置-搜索设置界面,如下图所示 2.箭头所指位置,就是select选项框,打开页面元素定位,下方红色框框区域,可以看到select标签属性: 3.选项有三个。 阅读全文
posted @ 2018-06-14 15:01 lunvo 阅读(346) 评论(0) 推荐(0)
摘要: 2.8 定位一组元素elements 前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象。webdriver 提供了定位一组元素的方法,跟前面八种定位方式其实一样,只是前面是单数,这里是复数形式:find_elemen 阅读全文
posted @ 2018-06-14 15:00 lunvo 阅读(240) 评论(0) 推荐(0)
摘要: 2.9 iframe 一、frame和iframe区别Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性。 frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架Iframe标记又叫浮动帧标记,可以用它将一个HTML文档嵌入在一个 阅读全文
posted @ 2018-06-14 15:00 lunvo 阅读(145) 评论(0) 推荐(0)
摘要: 2.7 多窗口、句柄(handle) 前言 有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。一、认识多窗口1.打开赶集网:http://bj.ganji.com/,点击 阅读全文
posted @ 2018-06-14 14:59 lunvo 阅读(368) 评论(0) 推荐(0)
摘要: 2.6 操作元素(键盘和鼠标事件) 前言在前面的几篇中重点介绍了一些元素的定位方法,定位到元素后,接下来就是需要操作元素了。本篇总结了web页面常用的一些操作元素方法,可以统称为行为事件有些web界面的选项菜单需要鼠标悬停在某个元素上才能显示出来(如百度页面的设置按钮)。 2.6.1 简单操作 1. 阅读全文
posted @ 2018-06-14 14:58 lunvo 阅读(214) 评论(0) 推荐(0)
摘要: 前言 大部分人在使用selenium定位元素时,用的是xpath定位,因为xpath基本能解决定位的需求。css定位往往被忽略掉了,其实css定位也有它的价值,css定位更快,语法更简洁。这一篇css的定位方法,主要是对比上一篇的xpath来的,基本上xpath能完成的,css也可以做到。两篇对比学 阅读全文
posted @ 2018-06-14 14:56 lunvo 阅读(120) 评论(0) 推荐(0)
摘要: 前言对于用火狐浏览器的小伙伴们,你还在为定位元素而烦恼嘛?上古神器Selenium Builder来啦,哪里不会点哪里,妈妈再也不用担心我的定位元素问题啦!(但是也不是万能,基本上都能覆盖到) 2.5.1 安装Selenium Builder 在火狐浏览器的附加组件中搜索添加Selenium Bui 阅读全文
posted @ 2018-06-14 14:56 lunvo 阅读(423) 评论(0) 推荐(0)
摘要: 今天,为大家介绍的是标题中的三个新方法,以及一个老方法 以下方法都需要操作一个名为Keys的包,先来简单认识下 key_down(value,element),key_up(value,element) key_down,在键盘上按住一个键,不放开,一般和key_up搭配使用 value指要发送的按 阅读全文
posted @ 2018-06-14 14:51 lunvo 阅读(657) 评论(0) 推荐(0)
摘要: 今天,分享的是ActionChains的使用方法。 先来说一下今天要用到的方法: click(element=null) 点击元素,参数为空时,鼠标在当前位置点击 send_keys(keys_to_send) 向文本框发送文字、按键 move_to_element(element) 鼠标悬浮在某元 阅读全文
posted @ 2018-06-14 14:50 lunvo 阅读(2435) 评论(0) 推荐(0)
摘要: 2.3 xpath定位 前言 在上一篇简单的介绍了用工具查看目标元素的xpath地址,工具查看比较死板,不够灵活,有时候直接复制粘贴会定位不到。这个时候就需要自己手动的去写xpath了,这一篇详细讲解xpath的一些语法。什么是xpath呢?官方介绍:XPath即为XML路径语言,它是一种用来确定X 阅读全文
posted @ 2018-06-14 14:41 lunvo 阅读(188) 评论(0) 推荐(0)
摘要: 2.2 常用8种元素定位(Firebug和firepath) 前言 元素定位在firefox上可以安装Firebug和firepath辅助工具进行元素定位。 2.2.1 环境准备 1.浏览器选择:Firefox2.安装插件:Firebug和FirePath(设置》附加组件》搜索:输入插件名称》下载安 阅读全文
posted @ 2018-06-14 14:40 lunvo 阅读(1490) 评论(0) 推荐(0)
摘要: 2.1 操作元素基本方法 前言从这篇开始,正式学习selenium的webdriver框架。我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是webdriver框架的API。本篇主要讲如何用Python调用webdriver框架的API,对浏览 阅读全文
posted @ 2018-06-14 14:39 lunvo 阅读(361) 评论(0) 推荐(0)