软件测试-自动化测试-selenium常见问题-多测师

一、Selenium原理 、 webdriver 原理是什么?

 

当测试脚本通过浏览器驱动(谷歌浏览器chromedriver.exe)启动Chrome的时候,selenium-webdriver 在新线程中启动Chrome浏览器。启动后selenium-webdriver会将Chrome绑定到特定的端口,绑定完成后chrome实例作为webdriver的remote server;客户端(也就是测试脚本)创建1个会话,在该session中通过http请求向remote server发送请求,请求的内容以json格式传输,webdriver翻译请求内容,转换为命令通过指定端口发送给remote server解析请求,完成相应操作并返回response;客户端接受response,并分析其返回值。

 

webdriver是按照server – client的经典设计模式设计的。

 

server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client(脚本)发送请求并做出相应;

 

client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被测试浏览器,也就是remote server;remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;

 

 

二、selenium中如何判断元素是否存在?

expected_conditions模块提供了多种校验方式,常用presence_of_element_located(判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement)。如果有需要的话,我还可以自定义expected_conditions方法。

 

三、selenium中hidden或者是display = none的元素是否可以定位到?

可以定位到,但是不能操作,我们可以通过is_displayed()方法来判断显示或不显示,如果想点击的话,可以用js去掉dispalay=none的属性。

 

四、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?  

通过wait模块中的WebDriverWait类提供的until或until_not方法与expected_conditions结合使用,进行二次封装。

 

五、如何提高selenium脚本的执行速度?

1.少用sleep,尽量不用implicitly_wait

2.多用显式等待方法     

 

六、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

通过wait模块中的WebDriverWait类提供的until或until_not方法与expected_conditions结合使用,进行二次封装。

 

七、自动化测试的时候是不是需要连接数据库做数据校验?

UI自动化不需要、接口测试会需要

 

八、id,name,class,xpath, css selector这些属性,你最偏爱哪一种,为什么?

我喜欢用css selector  css语法简洁,定位快(xpath语法长,定位慢,还不稳定)

 

九、如何去定位页面上动态加载的元素?

通过wait模块中的WebDriverWait类提供的until循环的去判断是否出现了要用的元素

 

十、如何去定位属性动态变化的元素?

先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位

 

十一、什么是page object设计模式?

1.把每个页面当成一个页面对象,对页面的可操作功能进行封装

2.测试case通过调用页面对象的方式来完成case的编写

3.可以做到UI操作与case编写进行分离

 

十二、怎样去选择一个下拉框中的value=xx的option?

1、通过两次click可以做到

2、通过执行js脚本做到(前提是你能写出js代码)

3、selenium提供了select模块,我们可以通过select模块中的方法定位,比如 index_of、value、text

 

十三、UI自动化最大的缺陷是什么?

需求变动大的时候,维护成本大

 

十四、webdriver可以用来做接口测试吗?

不可以、webdriver是专门做webUI自动化的。

 

 

posted @ 2020-11-25 10:56  多测师_谢sir  阅读(348)  评论(0编辑  收藏  举报