今天想和大家分享一篇有关Selenium+Web UI自动化测试的面试题,今天看了一个视频,在此加以总结,欢迎大佬进行补充。(由于本人平时使用java,所以下文皆以java语言为例)
1. Selenium怎么判断元素是否存在?
答:其实Selenium是没有现成的方法判断一个元素是否存在,所以我们可以选择曲线救国,把想要寻找的元素放在一个list中,判断list的size()是否为0,为0则不存在;不为0则存在。或者通过try catch的方式,当元素不存在时,捕捉异常,并且有相应的提示信息。如下为放在list中的伪代码,大概思路就是这样。
List<WebElement> list = driver.findelements(By.xpath(""));
int size = list.size();
if(size==0){
System.out.println("元素不存在于此页面!");
} else{
System.out.println("元素存在于此页面!");
}
2. 怎么保证你要操作的元素一定是可以点击的?
答:1)可能由于服务器性能较差,或者网速较慢等原因,导致元素暂时还未加载出来,元素此时无法点击。可以通过等待元素加载解决此问题(等待分三种:隐式等待,显式等待和强制等待,这里推荐显示等待,相对提高执行效率)。
2)元素定位没问题,但是元素太小,Selenium无法点击到元素的中心位置。此时可以通过往上面层级的方式,找到更大的元素中心点,此时就可以对元素进行点击。
3)当元素被遮挡,例如下拉框遮挡的元素,也会无法点击,并且报错。此时只需要点击页面的其他任意元素,使下拉框收回,遮挡元素便可以进行点击。
4)被点击的元素在可视范围之外时,元素也无法点击。此时可以通过操作滚动条来解决,Selenium中没有直接操作滚动条的方法,曲线救国又来了,可以通过执行javascript代码进行滚动条的操作。下面的代码是将元素向右滚动x像素点,向下滚动y个像素点,如果需要向左和向上滚动,x,y分别为负值即可。当然滚动条操作还有其他的方法,比如滚动到某个元素的位置等,具体大家可以自查。伪代码如下:
driver.excuteScript("windows.scrollBy(x,y)");
5)可以直接判断元素是否可以点击。
driver.findElement(By.id("")).isClickable();
3. 用例在执行中会出现不稳定的情况,如何避免,提高用例的稳定性?
1)使用干净的测试环境,没有其他的数据干扰。
2)使用等待。
3)多使用try捕捉异常(只针对于经常失败的元素)。
4. 如何提高Selenium的执行速度?
1)排除硬件和网络问题。
2)不要过多使用强制等待,尽量使用显式等待。
3)选择性能较好的浏览器,例如:chrome, safari。
4)分布式执行,Selenium grid支持多个浏览器同时执行,并且互不干扰,而且可以进行远程部署。
5. 元素定位方式:id, name, class name, css selector, xpath 哪个效率更高?
答:优先级:id>name>css selector>xpath,id是最快的定位方式。因为xpath需要全文检索,所以效率最差。
6. 自动化执行策略?
1)根据测试需求分析,设计测试用例。
2)搭建环境框架。
3)实现测试用例。
4)验证代码的正确性。
5)对被测试软件进行测试,得到测试结果。
7. 测试用例执行 (我门公司使用的是Teamcity来设置定时任务)
1)每天执行
2)周期执行,自设周期
3)动态执行,每次提交代码都会执行
8. UI自动化测试需不需要进行数据库的校验?
答:一般不需要,数据校验应该已经在单元测试时进行了验证,无需多此一举。除非一些重要的数据,也可以连接数据库进行验证。
9. Selenium的原理是什么?
1)浏览器
2)driver: 一般会下载与浏览器版本对应的driver
3)请求代码,client。请求代码发送给driver, driver解析请求之后,在浏览器进行相应的操作。