UI自动化常见精华面试题整理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
UI⾃动化常见精华⾯试题整理
selenium的运⾏原理
1、基于Web端如何做⾃动化测试,谈谈你的思路和⽅向?
Web端的⾃动化测试,基本就是模拟⼿⼯测试⼈员来做功能测试。
⽤机器的⾃动执⾏代替⼈的操作。
web端呈现的产品有两个⽅向可以做⾃动化测试:接⼝层和界⾯操作层,且接⼝层⾃动化的⽐例要⾼于界⾯操作层。
主要对产品稳定的功能进⾏⾃动化测试,主要⽤于产品的核⼼功能冒烟测试、回归测试。
从系统最核⼼的功能开始做,再根据情况慢慢展开。
2、UI⾃动化测试⽤例如何设计?
UI⾃动化测试⽤例是从⼿⼯测试⽤例中提取出来的,跟⼿⼯测试⽤例相⽐,⾃动化测试⽤例更加注重⽤例的严谨性,选择⽤例的时候遵循以下原则:
优先选取覆盖产品核⼼功能的⽤例;
从成本考量,不要选择流程过于复杂的⽤例;
选取的⽤例可以是重复执⾏,繁琐的部分,⽐如字段验证、提⽰信息验证;
优先实现正向的测试⽤例,反向⽤例⼀般情况复杂、数量多;
3、什么是PO模式?
PO模式,全称为Page Object Model ,简称POM,是页⾯对象模式。
对页⾯进⾏抽象或者说建模的过程,是把⼀个具体的页⾯转化为编程语⾔当中的⼀个对象,页⾯特性转化成对象属性,页⾯操作转化为对象⽅法。
把页⾯的⼀个个的web元素设计为页⾯对象的属性,把页⾯上的操作(如点击、输⼊等)设计为页⾯对象的⾏为。
在⾃动化测试当中,主要⽤来实现对页⾯操作和测试逻辑的⼀个分离,这样做的好处是业务和实现分开,使⾃动化测试脚本具备更⾼的可维护性。
4、你认为PO模式的封装原则有哪些?
公共⽅法表⽰页⾯提供的⼀个服务,⽐如我们可以把登录封装成⼀个 login ⽅法,把搜索⽅法封装成⼀个设施⽅法,把注册操作封装成⼀个register 的⽅法;
尽量不要暴露页⾯的内部,⽐如⼀个HTML的页⾯还有⼀个页⾯的上下结构;
在 PO 当中⼀般不做断⾔,会做到页⾯逻辑和测试逻辑的分离;
PO ⼀般⾥⾯的⽅法返回 self 或者是其他的 Page Object ,也可以是⼀个元素属性;
整个 PO 不需要封装整个页⾯的⾏为,⽤到什么逻辑就封装什么;
对于统⼀操作,如果出现不同的结果,可以把⽤不同的⽅法来表⽰,⽐如说登录成功有跳转,登录失败有报错,如果登录还有⼀种会授权的状况,那么可以封装成三个单独的⽅法:login success、login error、login invalid。
5、你怎么提⾼UI⾃动化脚本的稳定性?
尽量⽤相对路径的xpath表达式;
查找元素优先⽤显⽰等待;
⽤例与⽤例之间尽量避免产⽣依赖,⽤例可以独⽴执⾏;
⽤例执⾏结束后对测试场景进⾏还原,避免影响其他⽤例的执⾏;
脚本执⾏失败后加⼊重试机制,提升⽤例的稳定性;
尽量保证单独的测试环境,避免其他的测试同步进⾏;
6、UI ⾃动化测试中,如何做集群?
Selenium Grid,分布式执⾏⽤例;
你对Selenium Grid有什么了解?它提供了什么功能?
A: Selenium Grid是⼀款利⽤现有计算基础架构⼤幅加速Web应⽤程序功能测试的⼯具。
允许测试者轻松地在多台机器上并⾏运⾏多个测试,并且可以在异构环境中运⾏。
基于优秀的Selenium Web测试⼯具,Selenium Grid允许测试者并⾏运⾏多个Selenium Remote Control实例。
更好的是,它集成显⽰所有Selenium远程控制,所以不必担⼼实际的基础设施。
Selenium Grid将运⾏Selenium测试套件所需的时间,缩短到Selenium实例的单个实例运⾏时间的⼀⼩点。
7、简述你所知道的延时等待⽅式?
强制等待:也叫线程等待, 通过线程休眠的⽅式完成的等待,如等待5秒: Thread sleep(5000),⼀般情况下不太使⽤强制等待,主要应⽤的场景在于不同系统交互的地⽅。
隐式等待:通过implicitly Wait完成的延时等待,注意这种是针对全局设置的等待,如设置超时时间为10秒,使⽤了implicitlyWait后,如果第⼀次没有找到元素,会在10秒之内不断循环去找元素,如果超过10秒还没有找到,则抛出异常,硬式等待⽐较智能,它可以通过全局配置,但是只能⽤于元素定位。
显式等待:也称为智能等待,针对指定元素定位指定等待时间,在指定时间范围内进⾏元素查找,找到元素则直接返回,如果在超时还没有找到元素,则抛出异常,显⽰等待是 selenium 当中⽐较灵活的⼀种等待⽅式,他的实现原理其实是通过 while 循环不停的尝试需要进⾏的操作。