1、selenium中如何判断元素是否存在
答:selenium中没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断
2、selenium中的hidden或者是display=none的元素是否可以定位到
答:不可以,selenium不能定位不可见的元素。display=none的元素实际上是不可见的元素
3、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定可以点击的?
答:1)被点击的元素一定要占一定的空间,因为selenium默认会去点这个元素的中心点,不占空间的元素算不出来中心点
2)被点击的 元素不能被其他元素遮挡
3)被点击的元素不能再viewport之外,也就是说如果元素必须是可见的或者通过滚动条操作使得元素可见
4)使用element.is_enable()(python代码)判断元素是否可以被点击,如果返回false证明元素可能被灰化了,这时候就不能点击
4、如何提高selenium脚本的执行速度?
1)使用效率更高的语言,比如java执行速度就比python快
2)不要盲目的加sleep,尽量使用显式等待
3)对于Firefox,考虑使用测试专用的profile,因为每次启动浏览器的时候Firefox会创建1个新的profile,对于这个新的profile,所有的静态资源都是从服务器直接下载,而不是从缓存里加载,这就导致网络不好的时候用例运行速度特别慢的问题
4)chrome浏览器和Safari浏览器的执行速度看上去是最快的
5、用例在运行过程中经常出现不稳定的情况,也就是说这次可以不通过,下次就没办法通过了,如何去提升用例的稳定性?
1)测试专属profile,尽量让静态资源缓存
2)尽量使用显式等待
3)尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰
6、自动化测试的时候需不需要连接数据库做数据校验?
答:一般不需要,因为这是单元测试层做的事情,在自动化测试层不要为单元测试层没做的工作还债
7、如何去定位页面上动态加载的元素?
答:显式等待
8、selenium的原理?
1)浏览器
2)driver:一般我们都会下载driver
3)client:也就是我们写的代码
解析:client其实并不知道浏览器是怎么工作的,但是driver知道,在selenium启动以后,drive其实充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver。driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client,这就是client的工作原理
9、webdriver的协议是什么?
答:WebDrive协议本身是http协议,数据传输使用json
10、启动浏览器的时候用到的是哪个webdriver协议?
答:new session,如果创建成功,返回session和capabilities
11、什么是断言?
答:检查点,和预期和实际结果比较
如果预期等于实际,断言通过,测试报告上记录pass
如果预期不等于实际,断言失败,测试报告上记录fail
12、自动化最大的缺陷
1)实现成本高
2)运行速度慢
3)需要一定的代码能力才能及时维护
13、考虑:webdriver为什么不可以用来做接口测试呢?