Selenium自动化测试面试题合集
1、什么是自动化测试、自动化测试的优势是什么?
通过工具或脚本代替手工测试执行过程的测试都叫自动化测试。
自动化测试的优势:
1、减少回归测试成本
2、减少兼容性测试成本
3、提高测试反馈速度
4、提高测试覆盖率
5、让测试工程师做更有意义的测试
2、什么样的项目比较适合做自动化测试,什么样的不适合做自动化测试?
1、适合做的项目:
a.项目周期长且相对稳定
b.需要做频繁的冒烟测试
c.需要经常做回归测试
d.需要进行大数据量的数据驱动测试
2、不适合做的项目:
a.项目周期短用例不会多次重复执行
b.被测项目不稳定变化太频繁
3、说一下开展自动化工作的主要流程是怎样的?
1、选择合适的测试工具
2、定义自动化测试覆盖的范围
3、制定测试计划
4、自动化测试环境搭建
5、脚本开发
6、测试执行
7、测试脚本维护
4、在制定自动化测试计划的时候一般要考虑哪些点?
1、选择适合的测试工具或分析当前的工具是否适合新项目
2、选择合适的自动化测试框架
3、确定要做自动化测试的范围和不做自动化测试的范围
4、测试环境的准备与搭建
5、制定一个粗略的脚本开发的时间表
6、制定脚本执行的一些策略,如冒烟测试的频率,回归测试的时间点及频率等
7、定义自动化测试的输出,比如脚本,测试数据,发现的缺陷,测试报告等
5、编写自动化脚本时的一些规范?
1、统一的命名约定,如用例名,方法名等
2、良好的脚本注释
3、遵循代码规范,使用适当的缩进
4、对异常进行处理
6、你一般一天能编写多少个自动化脚本?
这个取决于测试用例场景的复杂度,一般一天能写2~5个左右,复杂的话一天只能写一个。
7、做自动化测试时关注的一些指标?
1、自动化测试用例的覆盖率=自动化测试用例数/所用用例总数,这个比例越高测试反馈越快,成本节约越多
2、节省的时间成本=手工测试所花的时间-自动化测试所花的时间
3、自动化测试的投入=开发脚本的投入+脚本维护的投入+工具价格
4、自动化测试发现的缺陷数,每次回归测试时自动化测试发现的缺陷数及漏测数,反应了自动化用例的有效性
5、自动化测试投入产出比
ROI=(手工测试的成本-自动化测试成本)/自动化测试成本
ROI如果是负值说明自动化测试的成本未收回,ROI为正值说明自动化测试成本已回收,且值越大说明回报越好。
8、自动化测试可以达到100%的覆盖率吗?
比较难,因为有些用例场景无法被自动化,一些验证易用性友好性的用例不适合做自动化,有些边缘的用例很少被重复执行,从投入产出比来说也不适合做自动化。
9、你们公司开展自动化测试遇到一些什么问题?
1、项目流程不规范,项目变动频繁导致自动化用例维护成本高,解决:深入理解用户需求,规范开发流程,自动化用例先覆盖已经稳定的功能
2、对自动化期望太高,自动化也是一个逐步完善的过程,不可能一下子完全代替手工
3、有些自动化工程师的技术能力偏弱,提升编程能力,提升自动化工具使用能力,对新人进行培训等
10、Selenium驱动浏览器使用的协议是什么?
JsonWireProtocol 是通过使用 webdriver 与 remote server 进行通信的 web service 协议。通过 http 请求,完成和 remote server 的交互。
11、Selenium工具都包含哪些组件?
Selenium WebDriver
Selenium IDE
Selenium Grid
12、Selenium中定位网页元素的八种方式?
13、webdriver启动常见的浏览器语句?
#!/usr/bin/env python
# -*- coding:utf-8 -*- from selenium import webdriver driver = webdriver.Chrome()
driver = webdriver.Firefox()
driver = webdriver.Ie()
14、如何选中下拉列表中的下拉选项?
#!/usr/bin/env python
# -*- coding:utf-8 -*- # 通过选项的顺序,第一个为0
select_by_index(index)
# 通过value属性
select_by_value(value)
# 通过选项可见文本
select_by_visible_text(text)
15、如何取消选中下拉列表中的下拉选项?
#!/usr/bin/env python
# -*- coding:utf-8 -*- deselect_by_index(index)
deselect_by_value(value)
deselect_by_visible_text(text)
deselect_all()
16、Selenium如何处理弹窗?
#!/usr/bin/env python
# -*- coding:utf-8 -*- # 确认
driver.switch_to.alert.accept()
# 取消
driver.switch_to.alert.dismiss()
# 在弹出框输入内容
driver.switch_to.alert.send_keys("输入数据")
17、Selenium可以处理Windows弹窗吗?
Selenium本身是不可以处理Windows弹窗的,但是Selenium可以借助Autolt小工具来完成对Windows弹窗的操作。
18、如何判断一个元素在页面上是显示出来的?
webelement类中的is_displayed()方法
本身这个函数用于判断某个元素是否存在页面上(这里的存在不是肉眼看到的存在,而是html代码的存在。某些情况元素的visibility为hidden或者display属性为none,我们在页面看不到但是实际是存在页面的一些元素。)
19、Selenium中如何判断元素是否存在?
#!/usr/bin/env python
# -*- coding:utf-8 -*- from selenium.common.exceptions import NoSuchElementException # 判断元素是否存在
def isElementPresent(self, by, value):
try:
element =self.driver.find_element(by=by, value=value)
except NoSuchElementException as e:
# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
return False
else:
# 没有发生异常,表示在页面中找到了该元素,返回True
return True
20、driver.quit()和driver.close()的区别?
driver.close()仅关闭当前用户正在操作的页面
driver.quit()关闭整个浏览器,关闭所有的页面
21、自动化测试用例从哪里来?
1、手工用例中抽取
2、参考自动化用例的执行策略
22、常见的自动化测试框架有哪些?
线性脚本框架、基于模块化的框架、库结构框架、数据驱动框架、关键字驱动框架、混合框架等
23、什么是POM?
POM,中文字母意思是,页面对象模型,POM是一种最近几年非常流行的自动化测试模型,或者思想,POM不是一个框架,是一个解决问题的思想。采用POM的目的是为了解决前端中UI变化频繁,从而造成测试自动化脚本维护的成本越来越大。
POM主要有以下优点:
1、把web ui对象仓库从测试脚本分离,业务代码和测试脚本分离。
2、每一个页面对应一个页面类,页面的元素写到这个页面类中。
3、页面类主要包括该页面的元素定位,和这些元素相关的业务操作代码封装的方法。
4、代码复用,从而减少测试脚本代码量。
5、层次清晰,同时支持多个编写自动化脚本开发,例如每个人写哪几个页面,不影响他人。
6、建议页面类和业务逻辑方法都给一个有意义的名称,方便他人快速编写脚本和维护脚本。
24、Selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
1、添加元素智能等待时间driver.implicitly_wait(30)
2、try 方式进行 id,name,class,xPath,css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种
3、Selenium 保证元素成功率是通过元素的定位,当然它的定位方法很多,一定能有合适的。但是在自动化工程的实施过程中,高质量的自动化测试不是只有测试人员保证的,需要开发人员规范开发习惯,如给页面元素加上唯一的 name,id 等,这样就能大大地提高元素定位的准确性。当然如果开发人员开发不规范,我们在定位元素的时候尽量使用相对地址定位,这样能减少元素定位受页面变化的影响。只要我们元素定位准确,就能保证每一个操作符合预期结果。
25、如何提高Selenium脚本的执行速度?
Selenium脚本的执行速度受多方面因素的影响,如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间,运行脚本的线程数等。所以不能单方面追求运行速度的,要确保稳定性,能稳定地实现回归测试才是关键。
我们可以从以下几个方面来提高速度:
1、减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。
2、中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。
3、在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度。
4、配置实现多线程,在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度。
26、你的自动化用例的执行策略是什么?
自动化测试用例的执行策略是要看自动化测试的目的,通常有如下几种策略:
1、自动化测试用例是用来监控的,在此目的下,我们就把自动化测试用例设置成定时执行的,比如每五分钟或是一个小时执行一次,在 Jenkins 上创建一个定时任务即可。
2、必须回归的用例,有些测试用例在产品变动上线之前都需要回归执行,那我们就把测试用例设置成触发式执行,在 Jenkins 上将我们的自动化测试任务绑定到开发的build任务上,当开发人员在测试环境上部署代码的时候,我们的自动化测试用例就会被触发执行。
3、不需要经常执行的测试用例,像全量测试用例,我们没有必要一直回归执行,必竟还是有时间消耗的,有些非主要业务线也不需要时时回归,这类测试用例我们就采用人工执行,在 Jenkins 上创建一个任务,需要执行的时候人工去构建即可。
27、什么是持续集成?
持续集成源于极限编程(XP),是一种软件实践,软件开发过程中集成步骤是一个漫长并且无法预测的过程。集成过程中可能会爆发大量的问题,因此集成过程需要尽可能小而多,实际上持续集成讲的是不断的去做软件的集成工作。持续集成,最简单的形式是包括一个监控版本控制(SVN、Git等)变化的工具,当变化被发觉时,这个工具可以自动的编译并测试你的应用。
Selenium自动化测试面试题合集的更多相关文章
- Struts+Hibernate+Spring面试题合集及答案
Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 ...
- Mybatis面试题合集及答案
Mybatis面试题合集及答案 1.#{}和${}的区别是什么? 答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态 ...
- Java 分布式框架面试题合集
Java 分布式框架面试题合集 1.什么是 ZooKeeper? 答:ZooKeeper 是一个开源的分布式应用程序协调服务,是一个典型的分布式数据一致性解决方案.设计目的是将那些复杂且容易出错的分布 ...
- Struts+Hibernate+Spring面试题合集及答案(转)
Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring 面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 ...
- selenium 自动化测试面试题及答案
写在开始: 这些问题和答案,都是自己在网上找的,整理的,有任何问题,概不负责.主要感谢博主Ray,http://www.cnblogs.com/tsbc/p/4922368.html 1.seleni ...
- 【转】Java面试题合集
2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对 ...
- Linux 运维工程师经典面试题合集(不断更新中 ...)
写在前面的话 做运维以来,关注了很多关于互联网技术,培训等乱七八糟的公众号,时不时的就会推一些各种公司的面试题过来. 大致看了一下,发现自己很多知识要么遗忘了,要么很难说出个所以然,所以这里对那些个人 ...
- 9月最新184道阿里、百度、腾讯、头条Java面试题合集
阿里面试题 1. 如何实现一个高效的单向链表逆序输出? 2. 已知sqrt(2)约等于1.414,要求不用数学库,求sqrt(2)精确到小数点后10位 3. 给定一个二叉搜索树(BST),找到树中第 ...
- 手撕面试官系列(一):spring108道面试题合集
前言 想必各位程序员已经开始准备金九银十的秋招了,创建这个这个系列文章的目的就是为了帮助大家解决面试的问题,系列文章将会一直更新,大家如果觉得不错可以关注我并转发,让更多程序兄弟看到~接下来我们进入正 ...
随机推荐
- MongDB日志分析
Result文件数据说明: Ip:106.39.41.166,(城市) Date:10/Nov/2016:00:01:02 +0800,(日期) Day:10,(天数) Traffic: 54 ,(流 ...
- 【刷题-LeetCode】205. Isomorphic Strings
Isomorphic Strings Given two strings *s* and *t*, determine if they are isomorphic. Two strings are ...
- 【记录一个问题】opencl enqueueWriteBuffer()中,cl_bool blocking参数设置无效
err = queue.enqueueWriteBuffer(in_buf, true, 0, bmp_size, bmp_data, NULL, &event); 以上代码中,第二个参数设置 ...
- 返回值Object-注解驱动作用
返回值Object 两个常用实现类 StringHttpMessageConverterhe:负责读取字符串格式的数据和写出字符串格式的数据 MappingJackson2HttpMessageCon ...
- ansible roles实践——部署zabbix-agent
1.tasks/main.yml 2.template/zabbix_agentd.conf.j2 3.[root@master] /etc/ansible$ vim zabbix_agent.yml
- 图文并茂理解iptables
原文地址:http://www.zsythink.net/archives/1199 以下是转载内容: iptables详解:图文并茂理解iptables | 朱双印博客 这篇文章会尽量以通俗易懂的方 ...
- undo和redo的区别
undo和redo的区别: undo一般用于事务的取消与回滚,记录的是数据修改前的值: redo一般用于恢复已确认但未写入数据库的数据,记录的是数据修改后的值.
- Task+ConcurrentQueue多线程编程
队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队. ConcurrentQueue< ...
- httpclient源码分析之 PoolingHttpClientConnectionManager 获取连接 (转)
PoolingHttpClientConnectionManager是一个HttpClientConnection的连接池,可以为多线程提供并发请求服务.主要作用就是分配连接,回收连接等.同一个rou ...
- kali切换桌面环境
感谢大佬:https://blog.csdn.net/tao546377318/article/details/52353018 kali 是基于Debian的发行版,兼容性和软件支持都很好,默认使用 ...