1.怎么判断元素是否存在?
判断元素是否存在和是否出现不同,判断是否存在意味着如果这个元素压根就不存在,就会抛出NoSuchElementException。这样就可以使用trycatch,如果catch到NoSuchElementException就返回false。通常在项目中会把这个功能封装在isElementPsent方法中。
2.如何判断元素是否出现?
判断元素是否出现,存在两种情况,一种是该元素压根就没有,自然不会出现;另外一种是有这样的元素,但是是hidden状态。可以通过先判断是否存在,如果不存在返回false;如果存在再去判断是否displayed。
3.selenium中hidden或者是display=none的元素是否可以定位到?
不能,想点击的话,可以用js去掉dispalay=none的属性。
4.selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
1.通过封装find方法实现waitforEmelentPsent,这样在对元素进行操作之前保证元素被找到,进而提高成功率。
2.在对元素操作之前,比如click,如果该元素未display(非hidden),就需要先滚动到该元素,然后进行click操作;为啥使用滚动?因为如果页面没有完全显示,element如果是在下拉之后才能显示出来,只能先滚动到该元素才能进行click,否则是不能click操作
JavascriptExecutorjs=(JavascriptExecutor)driver;//rolldownandkeeptheelementtothecenterofbrowserjs.executeScript("arguments[0].scrollIntoViewIfNeeded(true);",download);
3.不同方式进行定位,与expectedConditions判断方法封装,循环判断页面元素出现后再操作;
4.开发人员规范开发习惯,如给页面元素加上唯一的name,id等。
5.如何去定位页面上动态加载的元素?
触发动态事件,然后findElemnt
如果是动态菜单,需要一级一级find(JS实现)
6.如何去定位属性动态变化的元素?
属性动态变化是指该element没有固定的属性值,所以只能通过相对位置定位
比如通过xpath的轴,pant/following-sibling/pcent-sibling等
另外也可以尝试findbyelements遍历
7.点击链接以后,selenium是否会自动等待该页面加载完毕?
不会的。所以有的时候,当selenium并未加载完一个页面时再请求页面资源,则会误报不存在此元素。所以首先我们应该考虑判断,selenium是否加载完此页面。其次再通过函数查找该元素。
8.自动化测试的时候是否需要连接数据库做数据校验?
一般来说UI自动化不需要(很少需要);接口测试会需要:从数据库层面来进行数据校验可以更方便验证系统的数据处理方面是否正确;
9.有几种元素常用定位方式?分别是?你最偏爱哪一种,为什么?
8种:id、name、classname、tagname、linktext、partiallinktext、xpath、cssselector。我最常用的是xpath(或CssSelector)因为很多情况下,html标签的属性不够规范,无法通过单
一的属性定位,这个时候就只能使用xpath可以去重实现定位唯一element,事实上定位最快的是Id,因为id是唯一的,然而大多数开发并没有设置id。
10.怎么提高selenium脚本的自动化执行效率?
1.优化测试用例,尽可不使用sleep,减少使用ImplicitlyWait
2.多使用selenium的WebDriverWait/FluentWait,这样可以优化等待时间
3.减少不必要的操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。
4.中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。
5.使用性能好的电脑
11.用例在运行过程中经常会出现不稳定的情况,也就是这次可以通过,下次无法通过了,如何提高用例的稳定性?
1.查找元素前先做判断:ExpectedConditions里面的各种方法;
2.显式等待:多使用WebDriverWait,加上显式等待时间,等要操作的元素出现之后再执行下面的操作;
3.多用trycatch捕获异常;
4.多线程的时候,减少测试用例耦合度,因为多线程的执行顺序是不受控制的;
5.尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰。
12.你的自动化用例的执行策略是什么?
1.自动化测试用例是用来监控的。集成到jenkins,创建定时任务定时执行;
2.有些用例在产品上线前必须回归。jenkins上将任务绑定到开发的build任务上,触发执行;
3.有些用例不需要经常执行。jenkins创建一个任务,需要执行的时候人工构建即可。
13.什么是持续集成?
频繁地将代码集成到主干,持续性地进行项目的构架,以便能能够快速发现错误,防止分支大幅度偏离主干.
14.webdriverclient的原理是什么?
在selenium启动以后,driver充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver。driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client..
15.webdriver的协议是什么?
TheWiProtocol
16.启动浏览器的时候用到的是哪个webdriver协议?