32道 Selenium 软件测试面试问题

本文针对Selenium面试提供了常见问题解答,包括元素定位、操作成功率、脚本执行速度等关键议题,帮助读者理解Selenium的工作原理及最佳实践。

Time will tell.

今天有同学问到面试 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、自动化测试的时候是不是需要连接数据库做数据校验?

一般不需要,因为这是单元测试层做的事情,在自动化测试层尽量不要为单元测试层没做的工作还债。

9、id,name,clas,x path, css selector这些属性,你最偏爱哪一种,为什么?

xpath和css最为灵活,所以其他的答案都不够完美。

10、如何去定位页面上动态加载的元素?

显示等待。

11、如何去定位属性动态变化的元素?

找出属性动态变化的规律,然后根据上下文生成动态属性。

12、点击链接以后,selenium是否会自动等待该页面加载完毕?

java binding在点击链接后会自动等待页面加载完毕。

13、webdriver client的原理是什么?

selenium的原理涉及到3个部分,分别是:

浏览器

driver: 一般我们都会下载driver

client: 也就是我们写的代码

client其实并不知道浏览器是怎么工作的,但是driver知道,在selenium启动以后,driver其实充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver,driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client。这就是selenium工作的大致原理。

14、webdriver的协议是什么?

client与driver之间的约定,无论client是使用java实现还是c#实现,只要通过这个约定,client就可以准确的告诉drier它要做什么以及怎么做。

webdriver协议本身是http协议,数据传输使用json。

这里有webdriver协议的所有endpoint,稍微看一眼就知道这些endpoints涵盖了selenium的所有功能。

15、启动浏览器的时候用到的是哪个webdriver协议?

New Session,如果创建成功,返回sessionId和capabilities。

16、什么是page object设计模式?

简单来说就是用class去表示被测页面。在class中定义页面上的元素和一些该页面上专属的方法。

例子:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值