频次最高的38道selenium面试题及答案

2023-12-05

1、selenium的原理是什么?

selenium的原理涉及到3个部分,分别是:

浏览器
driver:一般我们都会下载driver
client:也就是我们写的代码
client其实并不知道浏览器是怎么工作的,但是driver知道,在selenium启动以后,driver其实充当了服务器的角色,跟client和浏览器通信,client根据webdriver协议发送请求给driver,driver解析请求,并在浏览器上执行相应的操作,并把执行结果返回给client。这就是selenium工作的大致原理。

2、WebDriver提供哪些常见类型的驱动程序?

WebDriver中常见驱动程序有(这部分建议在面试前查阅一下官网,做到实时同步更新):

FirefoxDriver
InternetExplorerDriver
ChromeDriver
SafariDriver
OperaDriver
AndroidDriver
3、webdriver的协议是什么?

client与driver之间的约定,无论client是使用java实现还是c#实现,只要通过这个约定,client就可以准确的告诉drier它要做什么以及怎么做。

webdriver协议本身是http协议,数据传输使用json。
这里有webdriver协议的所有endpoint,稍微浏览下就知道这些endpoints涵盖了selenium的所有功能。

4、什么是page object设计模式?

简单来说就是用class去表示被测页面。在class中定义页面上的元素和一些该页面上专属的方法。

5、什么是page factory?

Page Factory实际上是官方给出的java page object的工厂模式实现。

6、如何查找元素是否显示在屏幕上?

WebDriver通过isDisplayed(), isSelected(), isEnabled(),这三种方法判断Web元素的可见性,这类方法将返回结果是布尔类型;Web元素可以是按钮,下拉框,复选框,单选按钮,标签等。
①isDisplayed():
boolean b1 = driver.findElement(By.id(“XXX”)).isDisplayed();
②isSelected():
boolean b2 = driver.findElement(By.id(“XXX”)).isSelected();
③isEnabled():
boolean b3 = driver.findElement(By.id(“XXX”)).isEnabled();

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

selenium中没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素+异常捕获的方式判断。

# 判断元素是否存在
try:
dr.find_element_by_id('none')
except NoSuchElementException:
print 'element does not exist'
8、selenium中hidden或者是display = none的元素是否可以定位到?

不可以,selenium不能定位不可见的元素。display=none的元素实际上是不可见元素。

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

当网速不好的情况下,使用合适的等待时间;
被点击的元素一定要占一定的空间,因为selenium默认会去点这个元素的中心点,不占空间的元素算不出来中心点;
被点击的元素不能被其他元素遮挡;
被点击的元素不能在viewport之外,也就是说如果元素必须是可见的或者通过滚动条操作使得元素可见;
判断元素是否是可以被点击的。
10、selenium自动化页面元素找不到存在异常的原因?

元素定位错误;
页面加载时间过慢,需要查找的元素程序已经完成,单页面还未加载,此时可以设置加载页面等待时间;
有可能元素包含在iframe或者frame里面,需要切换。
11、如何去定位属性动态变化的元素?

属性动态变化是指该element没有固定的属性值,只能通过相对位置定位。
第一种方法:用findelements遍历。
第二种方法:通过xpath的轴 parent/following-sibling/precent-sibling

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

触发动态事件,继而findelement;如果是动态菜单,需要一级一级的find。

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

使用更高配置的电脑和选择更快的网络环境;
使用效率更高的语言,比如java执行速度就快过python;
优化代码;
不要盲目的加sleep,尽量使用显式等待;
可以考虑分布式执行(如,配置testNG实现多线程)或者使用selenium grid;
对于firefox,考虑使用测试专用的profile,因为每次启动浏览器的时候firefox会创建1个新的profile,对于这个新的profile,所有的静态资源都是从服务器直接下载,而不是从缓存里加载,这就导致网络不好的时候用例运行速度特别慢的问题;
chrome浏览器和safari浏览器的执行速度看上去是最快的。
14、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

测试专属profile,尽量让静态资源缓存;
尽量使用显式等待;
尽量使用测试专用环境,避免其他类型的测试同时进行,对数据造成干扰。
15、id,name,clas,xpath,css selector这些定位器,你最偏爱哪一种,为什么?

xpath和css最为灵活。id、name等需要开发支持。

16、selenium为什么不推荐使用xpath定位?

selenium使用xpath定位时采用遍历页面的方式,性能指标较差。另外xpath定位有通过绝对路径定位的,有时会不准确;
而用css选择器定位比较简洁,运行速度更快,通常用于性能要求严格的场景。

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

显式等待。(显示等待 就是有条件的等待,隐式等待 就是无条件的等待,如sleep、driver.implicitly_wait())
显示等待例子:
WebDriverWait(driver, 3, 0.5) #传入三个参数,第一个是浏览器驱动,第二个是等待多少秒,第三个是每隔多少秒监控一次

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

找出属性动态变化的规律,然后根据上下文生成动态属性。

19、如何通过子元素定位父元素?

通过父元素定位子元素,可以通过二次定位来找到。
第一种:通过子元素定位父元素,selenium提供了parent方法,但是只能定位到父元素,却不能获取元素属性,也不能操作。
第二种:通过xpath的语法直接定位。  如.//*[@name="hello"]/..   两个点代表父级元素。

20、selenium中隐藏元素定位,你该如何做?

隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,操作元素是指click 、clear 、send_keys等这些方法)。我们可以用js来操作隐藏元素。js和selenium不同,只有页面上有的元素(在dom里面的)都能正常操作。

21、如何判断一个页面上元素是否存在?

法1:用try...except  在代码块加上
法2:用elements定义组元素方法  然后根其元素个数len()<1  存在返回True,  不存在则返回False
法3:结合WebDriverWait和excepted_conditions条件判断(强烈推荐)。
例子:WebDriverWait(driver,30,1).until(excepted_conditions.title_contains(u"软件测试部落"))   #判断title,每间隔1秒判断一次,30秒超时,存在返回True,不存在则返回False

22、page object设置模式中,是否需要在page里定位的方法中加上断言?

一般不要,除非是要判断页面是否正确加载。

23、driver.close() 和driver.quit() 有什么区别?

driver.close() 关闭用户当前正在使用的Web浏览器窗口,quit()方法用于关闭程序已打开的所有窗口。

24、selenium 上传文件操作,需要被操作对象的type属性是什么?

file

25、selenium如何处理web弹窗?js弹窗?

需要使用driver.switch_to.alert()

26、如何在webdriver中调用应用程序?

driver.get('url')  或者 driver.navigate().to('url')

27、selenium中常见的异常?

NoSuchElementException、ElementNoInteractac、tableException、NoAlertPresentException

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

需要二次定位 :①拿到所有的option;②遍历option的value并与后台拿到的值进行比较(相同则选择该option)。

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

不会。所以有的时候,当selenium并未加载完一个页面时再请求页面资源,则会误报不存在此元素。所以首先我们应该考虑判断,selenium是否加载完此页面。其次再通过函数查找该元素。

30、selenium 是否可以调用js来对dom对象进行操作?

可以

31、selenium 是否可以向页面发送鼠标滚轮操作?

不能。(可利用javaScript来实现拖拽页面滚动条。)

32、selenium可以处理window弹窗吗?

selenium本身是不可以处理windows弹窗的,但是可以借助AutoIT小工具来完成对windows弹窗的操作,比如 上传下载附件等。

33、如何在定位元素后高亮元素(以调试为目的)?

使用javascript将元素的border或者背景颜色改成黄色或其他颜色即可。

34、selenium是否有读取excel文件的库?

没有,需要借助第三方工具。例如Apache PIO插件。

35、上传图片的几种方式?

send_keys和AutoIT工具实现.

36、selenium是否支持桌面应用软件的自动化测试?

不支持。selenium是根据网页元素的属性来确定范围元素的。

37、selenium是否支持用例的执行的引擎。

引擎好比就是一个发动机。selenium是没有关于测试用例和测试套件管理和执行的模块。我们需要借助第三方单元测试框架来实现用例管理和用例的执行。例如Java中有Junit或者testNG,python中有unittest单元测试框架。

38、列举selenium的局限性有哪些?

Selenium仅支持基于Web的应用程序的测试;
无法使用Selenium测试移动应用程序,可以选择Appium进行移动端功能测试;
验证码和条形码阅读器无法使用Selenium进行测试;
Selenium本身不具有生成测试报告的功能,以JAVA为例,需要结合第三方框架如TestNG或JUnit来生成测试报告。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

频次最高的38道selenium面试题及答案 的相关文章

随机推荐

  • (附源码)springboot学生考勤管理系统 毕业设计29554

    目 录 摘要 1 绪论 1 1课题背景及意义 1 2国内外研究现状
  • springboot美食系统 毕业设计-附源码44017

    目 录 摘要 1 绪论 1 1开发意义 1 2研究方法 1
  • (附源码)springboot学生考勤管理系统 毕业设计29554

    目 录 摘要 1 绪论 1 1课题背景及意义 1 2国内外研究现状 1
  • (附源码)python兴农购物网站系统 计算机毕设38256

    Django兴农购物网站系统 摘 要 助农工作是当前我国全面建成小康社会的重点工作 由于我国农村地域广大 贫困人口多 区域差异大 因此 不同区域的扶贫方法也是不一样的 近年来 随着网络的普及 许多农村地区物产丰富 但由于销售渠道不畅等原因
  • (附源码)基于ssm体育馆场地预约系统app-计算机毕设 25510

    ssm体育馆场地预约系统app 摘要 随着互联网的趋势的到来 各行各业都在考虑利用互联网将自己的信息推广出去 最好方式就是建立自己的平台信息 并对其进行管理 随着现在智能手机的普及 人们对于智能手机里面的应用 体育馆场地预约系统app 也在
  • (附源码)springboot美食推荐系统 毕业设计29145

    摘 要 美食作为社会化网络的一项服务 逐渐和网络社区结合成一种互联网美食经济产业链 在快节奏的生活中 相较于传统的美食网站解决大众吃什么的烦恼 服务于用户并展示美食的菜品和价格 一个体系结构清晰且资源丰富的基于微信小程序的美食推荐系统的搭建
  • (附源码)基于SSM动漫展示系统的开发-计算机毕设 25454

    SSM动漫展示系统的开发 摘 要 21世纪 全球网络化 科技在突飞猛进 我们的生活也随之发生了极大的变化 随着计算机的普及 我们社会和经济生活中的各个领域也在发生改变 人们进行信息交流的深度与广度在不断增加 这使得传统的行业模式也要跟随时代
  • 《LeetCode力扣练习》代码随想录——哈希表(三数之和---Java)

    LeetCode力扣练习 代码随想录 哈希表 三数之和 Java 刷题思路来源于 代码随想录 15 三数之和 排序双指针 class Solution public List
  • 算法设计与实现--贪心篇

    贪心算法 贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法 以期望能够通过一系列局部最优的选择达到全局最优 贪心算法的关键是定义好局部最优的选择 并且不回退 即一旦做出了选择 就不能撤销 一般来说 贪心算法适用于满足以下两个条件的
  • 算法设计与实现--动态规划篇

    什么是动态规划算法 动态规划算法是一种求解复杂问题的方法 通过将原问题分解为相对简单的子问题来求解 其基本思想是将待求解的问题分解为若干个子问题 阶段 按顺序求解子阶段 前一子问题的解 为后一子问题的求解提供了有用的信息 在求解任一子问题时
  • 光伏储能虚拟同步发电机并网仿真模型(Simulink仿真实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 目录 1 概述 2 运行结果 3 参考文献 4 Simulink仿真实现 1 概述 光伏储能虚拟同步发电
  • 【无标题】

    Postman是大家最常用的API调试工具 那么有没有一种方法可以不用手动写入接口到Postman 即可进行接口调试操作 今天给大家推荐一款IDEA插件 Apipost Helper 写完代码就可以调试接口并一键生成接口文档 而且还可以根据
  • 浅谈Django之单元测试

    一 什么是 单元测试 单元测试 是用来对一个模块 一个函数或者一个类来进行正确性检验的测试工作 如果测试通过则说明我们这个函数或功能能够正常工作 如果失败要么 测试用例 不正确 要么函数有bug需要修复 二 如何使用单元测试 from dj
  • 代码写完直接调试!IDEA插件还能这么用

    IDEA是一款功能强大的集成开发环境 IDE 它可以帮助开发人员更加高效地编写 调试和部署软件应用程序 我们在编写完接口代码后需要进行接口调试等操作 一般需要打开额外的调试工具 今天给大家介绍一款IDEA插件 Apipost Helper
  • 基于WOA-BP鲸鱼算法优化BP神经网络多维分类预测研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 讲解文档
  • 英语学习(去餐馆篇)

    一 预定餐位 1 餐馆 1 谈论食物 Seafood is their specialty 海鲜是他们的特色菜 They serve authentic Italian food 他们供应正宗意大利菜 2 谈论餐馆名声 The restau
  • 《LeetCode力扣练习》代码随想录——哈希表(四数之和---Java)

    LeetCode力扣练习 代码随想录 哈希表 四数之和 Java 刷题思路来源于 代码随想录 18 四数之和 排序双指针 class Solution public List
  • 国产API调试插件:Apipost-Helper

    前言 Idea 是一款功能强大的集成开发环境 IDE 它可以帮助开发人员更加高效地编写 调试和部署软件应用程序 Idea 还具有许多插件和扩展 可以根据开发人员的需要进行定制和扩展 从而提高开发效率 今天我们就来介绍一款国产的API调试插件
  • BP-AdaBoost算法研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及数据
  • 频次最高的38道selenium面试题及答案

    1 selenium的原理是什么 selenium的原理涉及到3个部分 分别是 浏览器 driver 一般我们都会下载driver client 也就是我们写的代码 client其实并不知道浏览器是怎么工作的 但是driver知道 在sel