• 2
  • 3
分享
  • 吊打面试官系列之:UI自动化面试题汇总,对标P7,从此再也不怕面试官了
  • Carl_奕然 2022-07-11 08:57:07 字数 5513 阅读 14576 收藏 3

1、引言

小屌丝:鱼哥,这金三银四的季节,你作为资深测试开发大佬(面试官),能不能分享一下关于UI自动化测试的技术呢?

小鱼:不用给我戴高帽,你的小心思,我能不知道?

小屌丝:嘿嘿,我主要提咱粉丝问的

小鱼:你操的心还怎不少呢?

屌丝:主要是你分享的那篇《吊打面试官系列之:移动APP测试开发面试题汇总,对标P7~ ~》太给力了。

小鱼:你可知道,移动测试app我准备了一周时间,

小屌丝:那就麻烦鱼哥再花一个星期,来准备 UI自动化测试开发相关的知识,也让更多的人,能感受吊打"面试官"快感。

小鱼:这.....作为一名合格面试官,岂能是被随便吊打的,不过,你的提议确实不错,我考虑下。

小屌丝:据说印象城新开了一家烤鱼,味道不错...

小鱼:......

2、基础篇

2.1 selenium的工作原理

-  脚本启动driver;

-  driver去驱动浏览器作为远程服务器;

-  执行脚本发送请求;

-   服务器解析请求作出相应操作,并返回给客户端(脚本);

2.2 selenium自动化页面元素找不到存在异常的原因

-  元素定位错误;

- 页面加载时间过慢,需要查找的元素程序已经完成,单页面还未加载,此时可以加载页面等待时间;

-  有可能元素包含在iframe或者frame里面,需要切换;

2.3 如何去定位属性动态变化的元素

属性动态变化是指该element没有固定的属性值,只能通过相对位置定位。

 - 第一种:用findelements遍历;

 - 第二种:通过xpath的轴    parent   /   following-sibling   /   precent-sibling;

2.4 如何去定位页面上动态加载的元素

触发动态事件,继而findelement;如果是动态菜单,需要一级一级的find。

2.5 selenium调用js(execute_script),有哪些场景

-  对input执行输入;

- 对富文本框的操作;

- 滚动到指定位置操作;

2.6 selenium如何处理web弹窗?js弹窗?

需要使用driver.switch_to.alert()

2.7  selenium可以处理window弹窗吗?

selenium本身是不可以处理windows弹窗的,但是可以借助AutoIT小工具来完成对windows弹窗的操作。比如 上传下载附件等

2.8 如何在定位元素后高亮元素(以调试为目的)

使用javascript将元素的border或者背景颜色改成黄色或其他颜色即可

 2.9 selenium是否支持桌面应用软件的自动化测试

不支持。selenium是根据网页元素的属性来确定范围元素的

2.10  selenium是否有读取excel文件的库

没有,需要借助第三方工具。

2.11 selenium是否可以向页面发送鼠标滚轮操作

不能

2.12 如何在webdriver中调用应用程序

driver.get('url')  或者 driver.navigate().to('url')

 2.13 selenium中常见的异常

- NoSuchElementException    找不到页面元素异常;

- ElementNoInteractac tableException;

2.14 selenium为什么不推荐使用xpath定位

selenium使用xpath定位时采用遍历页面的方式,性能指标较差。另外xpath定位有通过绝对路径定位的,有时会不准确;

而用css选择器定位比较简洁,运行速度更快,通常用于性能要求严格的场景。

2.15 如何判断一个页面上元素是否存在

 - 法1:用try...except  在代码块加上;

 - 法2:用elements定义组元素方法  然后根其元素个数len()<1  存在返回True,  不存在则返回False;

 - 法3:结合WebDriverWait和excepted_conditions条件判断(强烈推荐);

显示等待,每间隔1秒判断一次,30秒超时,存在返回True,不存在则返回False

2.16 如何定位动态元素

动态元素有两种情况:

- 一个是:属性动态,定位时,若id是动态的,就不要用id定位,用其他定位元素方法

- 另一个:还是这个元素一会在页面上方,一会在下方,飘忽不定,定位方法也是一样,根据元素属性定位(元素的tag name属性是不会变的,动的只是class属性和style属性)

2.17 如何通过子元素定位父元素

通过父元素定位子元素,可以通过二次定位来找到。

- 第一种:通过子元素定位父元素,selenium提供了parent方法,但是只能定位到父元素,却不能获取元素属性,也不能操作。

- 第二种:通过xpath的语法直接定位。  如.//*[@name="hello"]/..   两个点代表父级元素。

2.18 如何截取一个元素的图片,不要截取全部图片

首选、截取当前页面并自定义保存;

其次、根据要截取元素图片的属性来获取该元素的坐标和大小 ele.location    ele.size

第三、通过以下方式获取该元素的图片的坐标大小:

left = ele.location['x']

 top = ele.location['y']

right = ele.location['x'] + ele.size['width']

 bottom = ele.location['y'] + ele.size['height']

第四,再次打开刚开始保存的,通过image类中的crop方法(相当于拷贝该元素的一个矩形区域),然后做保存操作就可以了。   

2.19 一个元素明明定位了,点击无效(也没报错),如何解决

使用js点击,selenium有时候点击元素时会失效

 #  js 点击

 js = 'document.getElementById('baidu').click()'

 driver.execute_script(js)

2.20 如何提高脚本的稳定性

首先只要页面一直没变过,说明定位方法是没问题的。

优化方向:

 -  自己写相对路径,多用id为节点查找,少用右键复制xpath,那种不稳定。

 -  第二个影响因素就是等待了,sleep等待尽量少用(影响执行时间)

 -  定位元素方法重新封装,结合WebDriverWait和excepted_conditions判断元素方法,自己封装一套定位元素方法

2.21 提高selenium脚本的执行速度方式

 - 减少不必要的操作;

 - 页面加载过多并且不影响测试,可设置超时时间中断页面加载;

 - 设置等待时间时,可以sleep()固定的时间,检测到元素出现后中断等待也可以提高速度;

- 配置testNG实现多线程,在编写测试用例时,一定要实现松耦合,在服务器允许的情况下尽量设置多线程运行,提高执行速度;

2.22 selenium自动化时,在平时遇到过哪些问题?如何解决的

比如动态id  、有iframe的情况、没加等待等因素

2.23 selenium中隐藏元素定位,你该如何做

隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,操作元素是指click 、clear 、send_keys等这些方法)。

我们可以用js来操作隐藏元素。

js和selenium不同,只有页面上有的元素(在dom里面的)都能正常操作。

2.24 上传图片的几种方式

send_keys和AutoIT工具实现

2.25 截图应当怎么操作

driver.get_screenshot_as_file('图片路径')

3、进阶篇

3.1 列举web自动化中常见的元素定位方式?

 - id:根据id来获取元素,返回单个元素,id值一般是唯一的;

 - name:根据元素的name属性定位;

 - tagName:根据元素的标签名定位;

 - className:根据元素的样式class值定位;

 - linkText:根据超链接的文本值定位;

 - partialLinkText:根据超链接的部分文本值定位;

 - cssSelector:css选择器定位;

 - xpath:通过元素的路径来定位;

3.2 简述延时等待方式

 - 强制等待:也叫线程等待, 通过线程休眠的方式完成的等待,如等待5秒: Thread sleep(5000),一般情况下不太使用强制等待,主要应用的场景在于不同系统交互的地方。

 - 隐式等待:通过implicitly Wait完成的延时等待,注意这种是针对全局设置的等待,如设置超时时间为10秒,使用了implicitlyWait后,如果第一次没有找到元素,会在10秒之内不断循环去找元素,如果超过10秒还没有找到,则抛出异常,硬式等待比较智能,它可以通过全局配置,但是只能用于元素定位。

 - 显式等待:也称为智能等待,针对指定元素定位指定等待时间,在指定时间范围内进行元素查找,找到元素则直接返回,如果在超时还没有找到元素,则抛出异常,显示等待是 selenium 当中比较灵活的一种等待方式,他的实现原理其实是通过 while 循环不停的尝试需要进行的操作。

3.3 如何模拟浏览器的前进和后退、刷新

driver.navigate().back(); //后退
driver.navigate().forward();//前进
driver.navigate().refresh();//刷新

3.4  Selenium 自动化如何进行文件上传

如果是input元素的文件上传,可以通过 Selenium 当中的 send_keys 方式进行传递,但是这种方式局限性比较大,如果遇到像通过 js 调用的组件会有一些问题;

这个时候就需要通过一些和系统交互的方式去完成上传操作,比如通过autoit,pywinauto 或者是pyautogui这些第三方库进行操作。

3.5 UI自动化测试用例如何设计

UI自动化测试用例是从手工测试用例中提取出来的,跟手工测试用例相比,自动化测试用例更加注重用例的严谨性,选择用例的时候遵循以下原则:

 - 优先选取覆盖产品核心功能的用例;

 - 从成本考量,不要选择流程过于复杂的用例;

 - 选取的用例可以是重复执行,繁琐的部分,比如字段验证、提示信息验证;

 - 优先实现正向的测试用例,反向用例一般情况复杂、数量多;

3.6 什么是PO模式

PO模式,全称为Page Object Model ,简称POM,是页面对象模式。

对页面进行抽象或者说建模的过程,是把一个具体的页面转化为编程语言当中的一个对象,页面特性转化成对象属性,页面操作转化为对象方法。

把页面的一个个的web元素设计为页面对象的属性,把页面上的操作(如点击、输入等)设计为页面对象的行为。

在自动化测试当中,主要用来实现对页面操作和测试逻辑的一个分离,这样做的好处是业务和实现分开,使自动化测试脚本具备更高的可维护性。

3.7 PO模式的封装原则有哪些

 - 公共方法表示页面提供的一个服务,比如我们可以把登录封装成一个 login 方法,把搜索方法封装成一个设施方法,把注册操作封装成一个 register 的方法;

 - 尽量不要暴露页面的内部,比如一个HTML的页面还有一个页面的上下结构;

 - 在 PO 当中一般不做断言,会做到页面逻辑和测试逻辑的分离;

 - PO 一般里面的方法返回 self 或者是其他的 Page Object ,也可以是一个元素属性;

 - 整个 PO 不需要封装整个页面的行为,用到什么逻辑就封装什么;

 - 对于统一操作,如果出现不同的结果,可以把用不同的方法来表示,比如说登录成功有跳转,登录失败有报错,如果登录还有一种会授权的状况,那么可以封装成三个单独的方法:login success、login error、login invalid。

3.8 如何提高UI自动化脚本的稳定性

 - 尽量用相对路径的xpath表达式;

 - 查找元素优先用显示等待;

 - 用例与用例之间尽量避免产生依赖,用例可以独立执行;

 - 用例执行结束后对测试场景进行还原,避免影响其他用例的执行;

 - 脚本执行失败后加入重试机制,提升用例的稳定性;

 - 尽量保证单独的测试环境,避免其他的测试同步进行;

3.9 基于Web端如何做自动化测试,谈谈思路和方向

Web端的自动化测试,基本就是模拟手工测试人员来做功能测试。

用机器的自动执行代替人的操作。

web端呈现的产品有两个方向可以做自动化测试:

 - 接口层

 - 界面操作层,

主要对产品稳定的功能进行自动化测试,主要用于产品的核心功能冒烟测试、回归测试。从系统最核心的功能开始做,再根据情况慢慢展开。

3.10  UI 自动化测试中,如何做集群

 - Selenium Grid,分布式执行用例;

 - Appium 使用 STF 管理多设备;

 - Docker+K8S 管理集群;

4、总结

今天给大家分享我的吊打面试官专栏的,UI面试题,即:《吊打面试官系列之UI自动化面试题汇总,对标P7,从此再也不怕面试官了》。

希望大家停止摆烂,持续奋斗,在"成神"的道路上不停的努力。

如果有想专门应对大厂的面试技巧,当然,也可以私信我,

毕竟,能有一位大厂的面试官指导,可以事半功倍的。

最后,再唠叨一句,不要惧怕面试官,大厂的面试官,都是经过企业的选拔及培训的,都是有素质的。

当然,特殊的极个别的除外。

最后,希望大家都能进入到自己梦想中的大厂。

最后,关注Carl_奕然,带你学习更多测试开发的知识,让你也成为测试开发专家。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 读者提问:什么是自动化测试,自动化测试的动机和时机是什么 ?阿常回答:一、自动化测试的概念自动化测试的本质是先写一段代码,然后去测试另一段代码。所以实现自动化测试用例本身属于开发工作,需要投入大量的时间和精力,并且已经开发完成的用例还必须随着被测对象的改变而不断更新,你还需要为此付出维护测试用例的成本。二、自动化测试的动机1、自动化测试可以替代大量的手工机械的重复操作,QA可花更多的时间在更全面的用例设计和新功能的测试上。2、自动化测试可以大幅提升回归测试的效率。3、自动化测试可以更好的利用无人值守时间,非工作时间执行测试,工作时间分析失败用例。4、自动化测试可以高效实现某些手工测试...
            0 0 1130
            分享
          •   2023年第一个工作日,乐视CEO张巍通过全员信宣布:2023年1月1日起,公司将执行每周4天半工作制,即每周三实行弹性的半天工作制,考勤时间调整为连续的5小时。  据中国企业家消息,针对“实行每周四天半工作制”的情况,乐视市场部负责人表示,关于此次工作制的调整,很久以前就在考虑了,包括考虑更灵活的打卡制度。同时,员工正常的薪资福利和奖金都不变。  “乐视这家公司比较特殊,员工承受了很多来自外界的压力,之前很多员工都不敢说在乐视上班。”乐视方面称,这一次也并不是想要引领其他互联网公司或者其他公司去做制度改变,“我们自己知道其实是没有影响力的,我们只是想做好自己,提升员工的幸福感、认同感。”...
            0 0 962
            分享
          •   据报道,从欧美到亚洲,从微软、谷歌,到亚马逊、SAP,全球科技巨头今年以来的裁员人数已达数以万计。  但出人意料的是,这些公司绝大多数依然在盈利。  根据金融服务公司Jefferies的一份调查:“裁员是因为在疫情期间招聘过度,而且增长预期低于之前的预测。”  随着美国的利率上升和通胀高企,消费者也在不确定的全球经济环境中削减开支。  因此,Jefferies分析师总结道,企业“需要减少人员,通过与目前需求趋势匹配的员工人数重获运营效率”。  由于利率上升抬高了资本成本,也迫使企业纷纷减少人员支出。  美国银行全球研究部门在研报中写道:“创业公司尤其如此,他们之前因为低成本的资本而大幅增加...
            0 0 936
            分享
          •   北京时间6月1日早间消息,据报道,法国奢侈品巨头LVMH集团在巴黎的股价下跌2.6%,公司创始人贝尔纳·阿尔诺(BernardArnault)让出全球首富宝座,马斯克再次登顶。  阿尔诺现年74岁,今年二人争夺全球首富头衔,彼此交替,针锋相对。去年12月阿尔诺超越马斯克,因为当时通胀飙升,科技股低迷,奢侈品行业却拥有更强的抵抗力。LVMH旗下拥有LouisVuitton、Fendi和Hennessy等品牌。  现在经济呈现衰退迹象,投资者对奢侈品行业的信心开始下滑。自4月以来LVMH股价已经下跌10%,阿尔诺的净资产曾在一天之内蒸发110亿美元。特斯拉(203.93,2.77,1.38%)...
            0 0 955
            分享
          •   在水下拍摄3D图像是很棘手的,因为照明条件不一致,而且水中的颗粒会散射光线并导致失真。研究人员已经创建了一个新颖的原型系统,使用量子技术和LiDAR来克服这些困难。光探测和测距(LiDAR)系统通过测量脉冲激光从物体上反射并返回到系统接收器所需的时间(也称为"飞行时间")来创建图像。LiDAR经常被用来获得用于安全和防御的高清晰度三维图像。  现在,来自英国赫瑞瓦特大学和爱丁堡大学的研究人员已经设计了一个LiDAR系统原型,用于拍摄水下物体的三维图像。该系统使用脉冲绿色激光照亮物体,然后由数千个单光子(量子)探测器来接收反射的激光。  鉴于所使用的探测器数量众多,每秒钟...
            0 0 939
            分享
      • 51testing软件测试圈微信