selenium常见问题
1. 自动化代码中,用到了哪些设计模式?
-
单例模式
-
工厂模式
-
PO模式
-
数据驱动模式
2. 什么是断言?
-
检查一个条件,如果它为真,就不做任何事,用例通过。如果它为假,则会抛出 AssertError 并且包含错误信息。
3. UI 自动化测试中,如何做集群?
-
Selenium Grid,分布式执行用例
-
Appium 使用 STF 管理多设备
-
Docker+K8S 管理集群
4. 怎么对含有验证码的功能进行自动化测试?
-
万能验证码
-
测试环境屏蔽验证
-
其他操作不推荐
5. 如何优化和提高 Selenium 脚本的执行速度?
-
尽量使用 by_css_selector() 方法
-
by_css_selector() 方法的执行速度比 by_id() 方法的更快,因为源码中 by_id() 方法会被自动转成 by_css_selector() 方法处理;
-
使用等待时,尽量使用显示等待,少用 sleep(),尽量不用隐式等待;
-
尽量减少不必要的操作:可以直接访问页面的,不要通过点击操作访问;
-
并发执行测试用例:同时执行多条测试用例,降低用例间的耦合;
-
有些页面加载时间长,可以中断加载;
6. 接口测试能发现哪些问题?
-
可以发现很多在页面上操作发现不了的 bug;
-
检查系统的异常处理能力;
-
检查系统的安全性、稳定性;
-
前端随便变,接口测好了,后端不用变;
-
可以测试并发情况,一个账号,同时(大于 2 个请求)对最后一个商品下单,或不同账号,对最后一个商品下单;
-
可以修改请求参数,突破前端页面输入限制(如金额);
7. Selenium 中隐藏元素如何定位?
-
如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了(这个很多面试官也搞不清楚);
-
元素的属性隐藏和显示,主要是 type=“hidden” 和 style=“display: none;” 属性来控制的,接下来在元素属性里面让它隐藏,隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,很多初学者傻傻分不清楚),操作元素是 click,clear,send_keys 这些方法;
-
JS 操作隐藏元素;
8. 如何判断一个页面上元素是否存在?
-
方法一:用 try…except…
-
方法二:用 elements 定义一组元素方法,判断元素是否存在,存在返回 True,不存返回 False
-
方法三:结合 WebDriverWait 和 expected_conditions 判断(推荐)
9. 如何提高脚本的稳定性?
-
不要右键复制 xpath(十万八千里那种路径,肯定不稳定),自己写相对路径,多用 id 为节点查找;
-
定位没问题,第二个影响因素那就是等待了,sleep 等待尽量少用(影响执行时间);
-
定位元素方法重新封装,结合 WebDriverWait 和 expected_conditions 判断元素方法,自己封装一套定位元素方法;
10. 如何定位动态元素?
-
动态元素有 2 种情况,一个是属性动态,比如 id 是动态的,定位时候,那就不要用 id 定位就是了;
-
还有一种情况动态的,那就是这个元素一会在页面上方,一会在下方,飘忽不定的动态元素,定位方法也是一样,按 f12,根据元素属性定位(元素的 tag、name的步伐属性是不会变的,动的只是 class 属性和 styles 属性);
11. 如何通过子元素定位父元素
-
使用element.parent方法
12. 平常遇到过哪些问题? ?如何解决的
-
可以把平常遇到的元素定位的一些坑说下,然后说下为什么没定位到,比如动态 id、有 iframe、没加等待等因素;
13. 一个元素明明定位到了,点击无效(也没报错),如果解决?
-
使用 JS 点击,Selenium 有时候点击元素是会失效;
14. 测试的数据你放在哪?
-
对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如 ini);
-
对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成;
-
对于一个接口有多组测试的参数,可以参数化,数据放 YAML,Text,JSON,Excel 都可以;
-
对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理;
-
对于邮箱配置的一些参数,可以用 ini 配置文件;
-
对于全部是独立的接口项目,可以用数据驱动方式,用 excel/csv 管理测试的接口数据;
-
对于少量的静态数据,比如一个接口的测试数据,也就 2-3 组,可以写到 py脚本的开头,十年八年都不会变更的;
15. 什么是数据驱动,如何参数化?
-
参数化的思想是代码用例写好了后,不需要改代码,只需维护测试数据就可以了,并且根据不同的测试数据生成多个用例;
16. 其他接口都需要登录接口的信息,怎么去让这个登录的接口只在其他接口调用一次?
-
使用单例模式
-
使用自定义缓存机制
-
使用测试框架中的 setup 机制
-
pytest 中 fixture 机制
17. 接口产生的垃圾数据如何清理?
-
造数据和数据清理,需用 python 连数据库了,做增删改查的操作测试用例前置操作,setUp 做数据准备后置操作,tearDown 做数据清理
18. 怎么用接口案例去覆盖业务逻辑?
-
考虑不同的业务场景,一个接口走过的流程是什么样的,流程的逻辑是什么样的,什么样的参数会有什么样的结果,多场景覆盖;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?