UI自动化测试
UI自动化测试
1、web自动化中常见的元素定位方式?selenium如何定位元素?
有id,优先使用id定位
其次是name属性定位
再其次是css选择器定位
最后是xpath定位
tag name、class name、link text、等,基本很少用到
2、前端频繁变动时怎么减少维护脚本的成本?
3、延时等待方式有哪些?
- sleep():强制等待,设置固定休眠时间。即使设置一定的等待时间,也不能确保一定能够定位到元素,因为我们无法知道页面加载的时间,而且这种方法通常比较浪费脚本执行时间,效率低
- implicitly_wait():隐式等待,是设置的全局等待。在这个时间内,只有当元素被加载出来且页面被完成加载完成后,才执行下一步操作,保证了脚本的稳定性,但执行效率相对较低,因为我们往往只需要目标元素出现即可,并不需要等整个页面加载完成,而隐式等待要等待整个页面加载完才能执行下一步,浪费一定时间,为了解决这种弊端又引入了显式等待
- WebDriverWait():显式等待,是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。无需等待页面完全加载,节省大量因加载无关紧要的文件而浪费的时间。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException
4、selenium原理?
使用selenium实现自动化测试,主要需要3个东西
- 测试脚本,可以是python,java编写的脚本程序(也可以叫做client端)
- 浏览器驱动,这个驱动是根据不同的浏览器开发的,不同的浏览器使用不同的webdriver驱动程序,且需要对应相应的浏览器脚本
- 浏览器,目前selenium支持市面上大多数浏览器,如:火狐、谷歌、IE等
5、selenium工作过程?
- selenium client(python等语言编写的自动化测试脚本)初始化一个service服务,通过webdriver启动浏览器驱动程序 chromedriver.exe
- 通过RemoteWebDriver向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id
- 打开浏览器,绑定特定的端口,把启动后的浏览器作为webdriver的remote server
- 打开浏览器后,所有的selenium的操作(访问地址,查找元素)均通过RemoteConection链接到remote server,然后使用execute方法调用request方法通过urllib3向remote server请求
- 浏览器通过请求的内容执行对应动作
- 浏览器再把执行的动作结果通过浏览器驱动程序返回给测试脚本
6、webdriver原理?
由于客户端脚本不能直接与浏览器通信,这时候可以把WebDriver当做一个翻译器,它可以把客户端代码翻译成浏览器可以识别的代码(比如js),测试脚本创建一个session,在该session中通过http请求向Webdriver发送请求,Webdriver翻译成浏览器懂得脚本传给浏览器,浏览器把执行的结果返回给Webdriver,Webdriver把返回的结果做了一些封装(一般都是json格式),然后返回给客户端,根据返回值就能判断对浏览器的操作是不是执行成功
7、你是如何搭建ui自动化框架的?
8、如何设计ui自动化测试用例?
9、ui自动化有哪些缺点?如何改进?
不稳定,页面经常变,不好定位,不适合业务复杂和频繁变动的项目
改进:在项目中尽量使用显式等待
10、如何提高selenium脚本的执行速度?
selenium脚本执行速度影响因素:
网速、操作步骤的繁琐程度、页面的加载速度、脚本中设置的等待时间,一般来说,我们不单方面追求速度,一定程序上,愿意牺牲速度来保证自动化执行的稳定性
基于以上,可以从以下角度提升速度:
- 优化测试用例。设置等待时间的时候,少用sleep,尽量不用implicitly_wait,多用显式等待方法
- 减少不必要的操作步骤。如经过三四步才能打开要测试的页面的话,可以直接通过网址来打开
- 中断页面加载。如果加载的内容不影响我们测试,就设置超时时间,中断页面加载
11、什么是PO模式?
page object 页面对象
就将页面封装成类,需要用到的页面的元素定位和元素行为也封装进去以供调用
用例层从页面层调用操作方法,写成用例,可以做到定位给元素与脚本的分离
降低维护成本,将元素封装,与元素操作抽离开来
浙公网安备 33010602011771号