Selenium自动化测试:基于Python语言
内容总结
从最初开始接触selenium到现在已经有将近20天时间了,学习的契机是正好赶上公司架构调整,模块化调整,着重强调模块化思维,这样在我的工作空档期老大对我提出了一些期望,希望在工作中做一些突破。其实这也正是我所希望的,同时也一直没有找到强大的理由能支撑我学习下去的动力,所以在这方面能有突破还真的得感谢老大对我的信任。
基础:
开始接触python是在2年前,因为之前对java有了解,对C##也知道点(大学的那点基础),所以感觉这2种语言很重,在测试工作中无疑增加了很多额外的工作量。工作中受同事的影响开始接受了python,从自学到后来报班学习python,这样一点点的就有点认识了,总结下来就是语言这东西想学明白点必须在实践中去用才可以,遇到问题多查一些资料,把问题吃透,多做总结。
至于为啥选择selenium:
一是,现在公司的研发思想是重前端,webapp的感觉,大致是前端完成大部分业务交互逻辑,后端只负责数据存储;
二是,公司现在主要做的业务全部是web端,这样就导致在测试的过程中要实现各大浏览器的兼容问题(从IE8到IE11,chrome,firfox ,360,百度,qq,傲游,猎豹,搜狗。。。)工作量可想而知;
三是,selenium可以模拟用户在浏览器操作的各种行为(毕竟是比较成熟的框架了,能想到的行为都可以实现),同时可以检查页面元素显示情况是否符合预期(但是不能检查样式问题,曲线救国只能截图)。
四是,最重要的selenium Grid2 能实现并发多终端测试(多个浏览器)。综合以上几点selenium是现在比较适合我公司情况的框架,毫不犹豫,选之,用之,干之。
unittest配合selenium:
用例维护问题必须在设计之初有所考虑,对于每个模块的测试脚本以不同的分类进行分装,测试思路更加清晰敏捷。
用例构建通过python自带的自动化框架unittest进行组装,之前对它有些了解所以没有想别的就秒选了。它能完成对用例的自定义拼装,毕竟是自家的东西用起来也很简单。
内容介绍
Selenium是一个主要用于Web应用程序自动化测试的工具集合,在行业内已经得到广泛的应用。本书介绍了如何用Python语言调用Selenium WebDriver接口进行自动化测试。主要内容为:基于Python 的 Selenium WebDriver 入门知识、Selenium Python脚本、使用unittest 编写单元测试、生成HTML格式的测试报告、元素定位、Selenium Python API 介绍、元素等待机制、跨浏览器测试、移动端测试、编写一个iOS测试脚本、编写一个Android测试脚本、Page Object与数据驱动测试、Selenium WebDriver的特性、第三方工具与框架集成等核心技术。
《Selenium自动化测试 基于Python语言》适合任何软件测试人员阅读,也适合作为大专院校师生的学习用书和培训学校的教材。
目录
- 第 1章 基于Python的Selenium
- WebDriver入门 1
- 1.1 环境准备 2
- 1.1.1 安装Python 3
- 1.1.2 安装Selenium包 3
- 1.1.3 浏览Selenium WebDriver
- Python文档 3
- 1.1.4 选择一个IDE 4
- 1.1.5 PyCharm设置 8
- 1.2 Selenium Python脚本 11
- 1.3 支持跨浏览器 16
- 1.3.1 设置IE浏览器 16
- 1.3.2 设置Google Chrome
- 浏览器 19
- 1.4 章节回顾 21
- 第 2章 使用unittest编写单元测试 22
- 2.1 unittest单元测试框架 23
- 2.1.1 TestCase类 25
- 2.1.2 类级别的setUp()方法和
- tearDown()方法 30
- 2.1.3 断言 32
- 2.1.4 测试套件 33
- 2.2 生成HTML格式的测试报告 36
- 2.3 章节回顾 38
- 第3章 元素定位 39
- 3.1 借助浏览器开发模式定位 42
- 3.1.1 用火狐浏览器Firebug插件检查页面元素 42
- 3.1.2 用谷歌Chrome浏览器
- 检查页面元素 43
- 3.1.3 用IE浏览器检查页面
- 元素 44
- 3.2 元素定位 45
- 3.2.1 ID定位 46
- 3.2.2 name定位 47
- 3.2.3 class定位 47
- 3.2.4 tag定位 48
- 3.2.5 XPath定位 50
- 3.2.6 CSS选择器定位 51
- 3.2.7 Link定位 53
- 3.2.8 Partial link定位 54
- 3.3 方法实践 54
- 3.4 章节回顾 58
- 第4章 Selenium Python API介绍 59
- 4.1 HTML表单元素 60
- 4.2 WebDriver原理 61
- 4.2.1 WebDriver功能 61
- 4.2.2 WebDriver方法 61
- 4.3 WebElement接口 63
- 4.3.1 WebElement功能 63
- 4.3.2 WebElement方法 63
- 4.4 操作表单、文本框、复选框、单选
- 按钮 64
- 4.4.1 检查元素是否启用或
- 显示 65
- 4.4.2 获取元素对应的值 66
- 4.4.3 is_selected()方法 67
- 4.4.4 clear()与send_keys()
- 方法 67
- 4.5 操作下拉菜单 71
- 4.5.1 Select原理 72
- 4.5.2 Select功能 72
- 4.5.3 Select方法 72
- 4.6 操作警告和弹出框 75
- 4.6.1 Alert 原理 75
- 4.6.2 Alert功能 75
- 4.6.3 Alert方法 75
- 4.6.4 浏览器自动化处理 78
- 4.7 章节回顾 80
- 第5章 元素等待机制 81
- 5.1 隐式等待 82
- 5.2 显式等待 84
- 5.3 expected_conditions类 85
- 5.3.1 判断某个元素是否
- 存在 87
- 5.3.2 判断是否存在Alerts 88
- 5.4 预期条件判断的实践 89
- 5.5 章节回顾 90
- 第6章 跨浏览器测试 91
- 6.1 Selenium Standalone Server 93
- 6.1.1 下载Selenium Standalone
- Server 93
- 6.1.2 启动Selenium Standalone
- Server 94
- 6.2 在Selenium Standalone Server上
- 执行测试 95
- 6.2.1 配置IE支持 98
- 6.2.2 配置Chrome支持 98
- 6.3 Selenium Grid 98
- 6.3.1 启动hub 99
- 6.3.2 添加节点 100
- 6.4 Mac OS X的Safari节点 103
- 6.5 在Grid上执行测试 104
- 6.6 在云端执行测试 107
- 6.7 章节回顾 110
- 第7章 移动端测试 111
- 7.1 认识Appium 112
- 7.1.1 Appium支持的应用
- 类型 113
- 7.1.2 Appium环境准备 113
- 7.2 安装Appium 116
- 7.3 iOS测试 119
- 7.4 Android测试 122
- 7.5 使用Sauce Labs 126
- 7.6 章节回顾 128
- 第8章 Page Object与数据驱动
- 测试 129
- 8.1 数据驱动测试 130
- 8.2 使用ddt执行数据驱动测试 131
- 8.2.1 安装ddt 131
- 8.2.2 设计一个简单的数据
- 驱动测试 131
- 8.3 使用外部数据的数据驱动
- 测试 133
- 8.3.1 通过CSV获取数据 133
- 8.3.2 通过Excel获取数据 136
- 8.4 Page Object设计模式 138
- 8.4.1 测试准备 140
- 8.4.2 BasePage对象 140
- 8.4.3 实现Page Object 141
- 8.4.4 构建Page Object模式
- 测试实例 145
- 8.5 章节回顾 146
- 第9章 Selenium WebDriver的特性 147
- 9.1 键盘与鼠标事件 148
- 9.1.1 键盘事件 150
- 9.1.2 鼠标事件 151
- 9.2 调用JavaScript 154
- 9.3 屏幕截图 157
- 9.4 屏幕录制 158
- 9.5 弹出窗的处理 161
- 9.6 操作cookies 163
- 9.7 章节回顾 165
- 第 10章 第三方工具与框架集成 167
- 10.1 行为驱动开发(BDD) 168
- 10.1.1 Behave安装 169
- 10.1.2 feature 169
- 10.2 持续集成Jenkins 174
- 10.2.1 Jenkins环境准备 174
- 10.2.2 搭建Jenkins 175
- 10.3 章节回顾 182
刚接触自动化测试不到半年的时间,用的是Selenium+Java来做的。对于刚接触Selenium的新人来说,应该最先掌握的是常用的几种定位方法ById、ByName、ByClassName、ByCssSelector、ByXpath、ByLinkText(这几种是我最常用的)。 因为自动化的难度取决于UI框架,我们公司用的是MiniUI,个人感觉比较坑,有好多元素的Id是动态的,大部分都是XXX-1、XXX-2,数字会动,这样就给自动化增加了难度,大部分时候就要放弃ById这种用法了。在我们公司的UI设计中,好多的Name也是一样的或者有时候元素里面都没有这个。用的最多的是ByCssSelector和ByXpath这两种方法,这两种方法更容易直接定位到元素。大家在定位元素的时候,可以打开开发者工具,先点一下元素,看看开发者工具下面元素的变化,有的元素是有悬停效果的,这个可以帮助我们更清楚这个元素的操作变化,悬停可以用到Selenium中的一个方法actions.moveToElement()。 但是在MiniUI中,我觉得最难的还是定位和操作Iframe里面的元素,首先Iframe它是一个遮罩一样的东西,它把我们想操作的元素挡住了,我们没法直接对它发起操作,这个时候就要先切换Iframe,可以用driver.switchTo.frame()来切换到iframe,切换完成后,要做另一个操作,在次切换到需要操作的元素的一级DIV层,可以直接用driver.findElementById(),切换过后,这样便可对元素进行定位操作了。 对于Iframe中的输入框操作还算容易,目前我尝试用click的方式去操作Iframe里面的下拉框,没成功,只能用键盘模拟的方式去操作,就是用Tab/Down/Enter这几个键去操作下拉框。对于Iframe里的日历控件实在是没突破,囧~~~,如果有大神知道好办法,望指点一二。