【Selenium学习】常见面试题

转自:http://www.imdsx.cn/

一、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循环的去判断是否出现了要用的元素

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

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

十、webdriver client的原理是什么?

当测试脚本启动Chrome的时候,selenium-webdriver 会首先在新线程中启动Chrome浏览器。启动后selenium-webdriver会将Chrome绑定到特定的端口,绑定完成后该chrome实例便作为webdriver的remote server存在;客户端(也就是测试脚本)创建1个会话,在该session中通过http请求向remote server发送请求,remote server解析请求,完成相应操作并返回response;客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本;

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

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

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

十一、什么是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

4、还可以通过xpath定位,但是有时会出错误

十三、如何在定位元素后高亮元素

通过js更改元素属性

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

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

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

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

posted @ 2020-04-16 21:20  gtea  阅读(212)  评论(0编辑  收藏  举报