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://file.jishuzhan.net/article/1748714153649901569/0d67d6f6d2e1e3a728b001b31aec9688.webp) 这些资料,对于【[软件测试](https://so.csdn.net/so/search?q=%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95&spm=1001.2101.3001.7020 "软件测试")】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!**有需要的小伙伴可以点击下方小卡片领取** ![](https://file.jishuzhan.net/article/1748714153649901569/c13c269f8aa68233f0d3225c3f1a748c.webp)

相关推荐
databook11 分钟前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar1 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780512 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_2 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机8 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机9 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机9 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机9 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i9 小时前
drf初步梳理
python·django
每日AI新事件9 小时前
python的异步函数
python