今天有同学问到seleinum面试的时候会问到的问题,随便想了想,暂时纪录一下。欢迎大家在评论中提供更多问题。
1.selenium中如何判断元素是否存在?
selenium中没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断。
# 判断元素是否存在try:
dr.find_element_by_id('none')except NoSuchElementException:
print 'element does not exist'
2.selenium中hidden或者是display = none的元素是否可以定位到?
不可以,selenium不能定位不可见的元素。display=none的元素实际上是不可见元素。
3.selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
被点击的元素一定要占一定的空间,因为selenium默认会去点这个元素的中心点,不占空间的元素算不出来中心点;
被点击的元素不能被其他元素遮挡;
被点击的元素不能在viewport之外,也就是说如果元素必须是可见的或者通过滚动条操作使得元素可见;
使用element.is_enabled()(python代码)判断元素是否是可以被点击的,如果返回false证明元素可能灰化了,这时候就不能点;
4.如何提高selenium脚本的执行速度?
使用效率更高的语言,比如java执行速度就快过python
不要盲目的加sleep,尽量使用显示等待
对于firefox,考虑使用测试专用的profile,因为每次启动浏览器的时候firefox会创建1个新的profile,对于这个新的profile,所有的静态资源都是从服务器直接下载,而不是从缓存里加载,这就导致网络不好的时候用例运行速度特别慢的问题
chrome浏览器和safari浏览器的执行速度看上去是最快的
可以考虑分布式执行或者使用selenium grid
5.用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
测试专属profile,尽量让静态资源缓存
尽量使用显示等待
尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰
6.你的自动化用例的执行策略是什么?
每日执行:比如每天晚上在主干执行一次
周期执行:每隔2小时在开发分之执行一次
动态执行:每次代码有提交就执行
7.什么是持续集成?
可以自行百度,学习能力自我提升很重要(1079636098)软件测试技术交流群推荐。
8.自动化测试的时候是不是需要连接数据库做数据校验?
一般不需要,因为这是单元测试层做的事情,在自动化测试层尽量不要为单元测试层没做的工作还债。