1、Selenium原理 、 webdriver 原理是什么?css
当测试脚本经过浏览器驱动(谷歌浏览器chromedriver.exe)启动Chrome的时候,selenium-webdriver 在新线程中启动Chrome浏览器。启动后selenium-webdriver会将Chrome绑定到特定的端口,绑定完成后chrome实例做为webdriver的remote server;客户端(也就是测试脚本)建立1个会话,在该session中经过http请求向remote server发送请求,请求的内容以json格式传输,webdriver翻译请求内容,转换为命令经过指定端口发送给remote server解析请求,完成相应操做并返回response;客户端接受response,并分析其返回值。web
webdriver是按照server – client的经典设计模式设计的。chrome
server端就是remote server,能够是任意的浏览器。当咱们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client(脚本)发送请求并作出相应;数据库
client端简单说来就是咱们的测试代码,咱们测试代码中的一些行为,好比打开浏览器,转跳到特定的url等操做是以http请求的方式发送给被测试浏览器,也就是remote server;remote server接受请求,并执行相应操做,并在response中返回执行状态、返回值等信息;json
2、selenium中如何判断元素是否存在?设计模式
expected_conditions模块提供了多种校验方式,经常使用presence_of_element_located(判断某个元素是否被加到了dom树里,并不表明该元素必定可见,若是定位到就返回WebElement)。若是有须要的话,我还能够自定义expected_conditions方法。浏览器
3、selenium中hidden或者是display = none的元素是否能够定位到?session
能够定位到,可是不能操做,咱们能够经过is_displayed()方法来判断显示或不显示,若是想点击的话,能够用js去掉dispalay=none的属性。dom
4、selenium中如何保证操做元素的成功率?也就是说如何保证我点击的元素必定是能够点击的?
测试
经过wait模块中的WebDriverWait类提供的until或until_not方法与expected_conditions结合使用,进行二次封装。
5、如何提升selenium脚本的执行速度?
1.少用sleep,尽可能不用implicitly_wait
2.多用显式等待方法
6、用例在运行过程当中常常会出现不稳定的状况,也就是说此次能够经过,下次就没办法经过了,如何去提高用例的稳定性?
经过wait模块中的WebDriverWait类提供的until或until_not方法与expected_conditions结合使用,进行二次封装。
7、自动化测试的时候是否是须要链接数据库作数据校验?
UI自动化不须要、接口测试会须要
8、id,name,class,xpath, css selector这些属性,你最偏心哪种,为何?
我喜欢用css selector css语法简洁,定位快(xpath语法长,定位慢,还不稳定)
9、如何去定位页面上动态加载的元素?
经过wait模块中的WebDriverWait类提供的until循环的去判断是否出现了要用的元素
10、如何去定位属性动态变化的元素?
先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位
11、什么是page object设计模式?
1.把每一个页面当成一个页面对象,对页面的可操做功能进行封装
2.测试case经过调用页面对象的方式来完成case的编写
3.能够作到UI操做与case编写进行分离
12、怎样去选择一个下拉框中的value=xx的option?
一、经过两次click能够作到
二、经过执行js脚本作到(前提是你能写出js代码)
三、selenium提供了select模块,咱们能够经过select模块中的方法定位,好比 index_of、value、text
十3、UI自动化最大的缺陷是什么?
需求变更大的时候,维护成本大
十4、webdriver能够用来作接口测试吗?
不能够、webdriver是专门作webUI自动化的。