Python自动化测试【selenium面试题】

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

expected_conditions模块提供了16种判断方法,以下方法是判断元素存在DOM中:

presence_of_element_located

""" An expectation for checking that an element is present on the DOM of a page. This does not necessarily mean that the element is visible.

判断元素存在DOM中,存在并不代表可见(也就是说可以是隐藏的,存在并不代表可以被点击)

"""

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

定位是可以定位到的,但是不能操作,可以判断元素is_displayed()

想点击的话,可以用js去掉dispalay=none的属性

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

WebDriverWait()与expected_conditions判断方法封装,循环判断页面元素出现后再操作,这样可以大大提高操作元素的成功率。

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

1.少用sleep,尽量不用implicitly_wait

2.多用显式等待方法

3.弄个性能好的电脑

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

跟第三问一样,封装显示等待与判断方法

六、你的自动化用例的执行策略是什么?

1.集成到jenkins一键执行,可以手动执行,也可以定时执行

七、什么是持续集成?

1.持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。

每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

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

1 UI自动化不需要

2 接口测试会需要

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

1.css妥妥的,css语法简洁,定位快(xpath语法长,定位慢,还不稳定)

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

  1. WebDriverWait()方法循环去查询是否元素加载出来了

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

1.先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位(以不变应万变)

十二、点击链接以后,selenium是否会自动等待该页面加载完毕?

1.这个不会等的,没加载完也可以下一步操作

十三、webdriver client的原理是什么?

Webdriver实现原理\](http://www.cnblogs.com/timsheng/archive/2012/06/12/2546957.html) 通过研究selenium-webdriver的源码,笔者发现其实webdriver的实现原理并不高深莫测无法揣度。在这里以webdriver ruby binding的firefox-webdriver实现为例,简单介绍一下webdriver的工作原理。 当测试脚本启动firefox的时候,selenium-webdriver 会首先在新线程中启动firefox浏览器。如果测试脚本指定了firefox的profile,那么就以该profile启动,否则的话就新启1个profile,并启动firefox; firefox一般是以-no-remote的方法启动,启动后selenium-webdriver会将firefox绑定到特定的端口,绑定完成后该firefox实例便作为webdriver的remote server存在; 客户端(也就是测试脚本)创建1个session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,完成相应操作并返回response; 客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本; 这就是webdriver的工作流程,看起来很复杂实际上当了解了webdriver的实现原理后,理解上述问题应该比较简单。 webdriver是按照server -- client的经典设计模式设计的。 server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应; client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被 测试浏览器,也就是remote server;remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息; **十四、webdriver的协议是什么?** **十五、启动浏览器的时候用到的是哪个webdriver协议?** **十六、什么是page object设计模式?** 1.通俗来讲,把每个页面当成一个页面对象,页面层写定位元素方法和页面操作方法 2.用例层从页面层调用操作方法,写成用例 3.可以做到定位元素与脚本的分离 **十七、什么是page factory设计模式?** 创建一个BasePage类创建多个Page类,继承BasePage用例层调用Page类 **十八、怎样去选择一个下拉框中的value=xx的option?** 1.select类里面提供的方法:select_by_value("xxx") 2.xpath的语法也可以定位到 **十九、如何在定位元素后高亮元素(以调试为目的)?** 1.js方法,直接让该元素置顶 2.要是点击后没高亮,就用js去修改属性吧(万能的js) **二十、什么是断言?** 1.assert,判断测试结果与期望结果是否一致 **二十一、如果你进行自动化测试方案的选型,你会选择哪种语言,java,js,python还是ruby?** 1.大python威武,js也要略懂 **二十二、page object设置模式中,是否需要在page里定位的方法中加上断言?** 1.不需要,page页只做元素抓取和操作方法 **二十三、page object设计模式中,如何实现页面的跳转?** 1.初始化driver参数,Page类传driver参数 **二十四、自动化测试用例从哪里来?** 1.自己写的 2.别人写的 (这问题有点虎,反正不是天上掉下来的) **二十五、你觉得自动化测试最大的缺陷是什么?** 1.需求变动大的时候,维护成本大 **二十六、什么是分层测试?** 1.数据层 2.接口层 3.UI层 自由发挥吧 **二十七、webdriver可以用来做接口测试吗?** 1.不可以,webdriver是专门做web的UI自动化参数 **总结:** 从整个的面试题来看,难度还是挺大的,特别是脚本性能的优化这块,如果只是会简单的几个元素定位是完全无法着手优化的。 能提出这些问题出来的面试官也是有一定实力的。 **最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:** #### ![](https://i-blog.csdnimg.cn/direct/bd1c10518f794e80bba58fa59bfc344c.png)​ 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! ![](https://img-blog.csdnimg.cn/direct/15f11b9000784d40a96da05717b0d9b0.jpeg)

相关推荐
一点也不想取名13 分钟前
解决 Java 与 JavaScript 之间特殊字符传递问题的终极方案
java·开发语言·javascript
276695829216 分钟前
朴朴超市小程序 sign-v2 分析
java·python·小程序·逆向分析·朴朴超市·sign-v2·朴朴
im_AMBER29 分钟前
java复习 11
java·开发语言
Cai junhao39 分钟前
【Qt】工具介绍和信号与槽机制
开发语言·c++·qt·qt6.3
黑牛先生40 分钟前
【Qt】信号与槽
开发语言·qt
Y3174291 小时前
Python Day50 学习(仍为日志Day19的内容复习)
python·学习·机器学习
whyeekkk2 小时前
python打卡第52天
pytorch·python·深度学习
橙子199110162 小时前
Kotlin 中的 Object
android·开发语言·kotlin
qh0526wy2 小时前
历史交易数据涨跌分级
python