当前位置: 首页 > news >正文

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

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

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来生成测试报告。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!

相关文章:

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

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

利用MSF设置代理

1、介绍&#xff1a; 通过MSF拿到一个机器的权限后&#xff0c;通过MSF搭建socks代理&#xff0c;然后通内网。 拿到目标权限&#xff0c;有很多方法&#xff0c;比如&#xff1a;①ms17-010 ②补丁漏洞 ③MSF生成后门 在此直接使用MSF生成后门 MSF中有三个代理模块&#x…...

模型剪枝算法——L1正则化BN层的γ因子

ICCV在2017年刊登了一篇经典论文《 Learning Efficient Convolutional Networks through Network Slimming》。在神经网络的卷积操作之后会得到多个特征图&#xff0c;通过策略突出重要的特征达到对网络瘦身的目的。在该论文中使用的剪枝策略就是稀疏化BN层中的缩放因子 。 Bat…...

11.9 知识总结(三板斧、全局配置文件、静态文件的配置、request对象等)

一、 三板斧的使用 三个方法&#xff1a; HttpResponse render redirect def index(request): print(request) # return HttpResponse("request") # 它返回的是字符串 # return render(request, index.html) # 加载HTML页面的 # return redirect(ht…...

CSS 外边距、填充、分组嵌套、尺寸

一、CSS 外边距&#xff1a; CSS margin&#xff08;外边距&#xff09;属性定义元素周期的空间。margin清除周围的&#xff08;外边框&#xff09;元素区域。margin没有背景颜色&#xff0c;是完全透明的。margin可以单独改变元素的上、下、左、右边距&#xff0c;也可以一次改…...

Exploration by random network distillation论文笔记

Exploration by Random Network Distillation (2018) 随机网络蒸馏探索 0、问题 这篇文章提出的随机网络蒸馏方法与Curiosity-driven Exploration by Self-supervised Prediction中提出的好奇心机制的区别&#xff1f; 猜想&#xff1a;本文是基于随机网络蒸馏提出的intrin…...

Ubuntu22.04配置Go环境

Ubuntu上配置Go环境biCentOS简单多了&#xff0c;有两种方案&#xff0c;一种直接使用apt进行安装&#xff0c;一种自己从官网下载安装包进行安装。 1、使用apt直接安装 更新apt安装包&#xff0c;常规操作 apt update 然后看看apt自带的Go版本是多少 apt list golang 是1…...

Zabbix深入解析与实战

1.Zabbix 1.1.监控概述 监控是指对行为、活动或其他变动中信息的一种持续性关注&#xff0c;通常是为了对人达成影响、管理、指导或保护的目的 监控 监视主机架构状态控制&#xff0c;事后追责目标&#xff1a;早发现早处理(故障、性能、架构) 网站扩容(用数据说话) 为什么要…...

怎么用电脑开发安卓app?能外包吗?

随着智能手机的普及&#xff0c;安卓应用程序的开发需求也越来越高&#xff0c;许多人都想开发自己的安卓应用程序&#xff0c;但苦于缺乏相关知识和技能&#xff0c;本文将介绍如何使用电脑开发安卓应用程序&#xff0c;以及是否可以将开发工作外包给专业的开发团队。 一、了…...

1-前端基本知识-HTML

1-前端基本知识-HTML 文章目录 1-前端基本知识-HTML总体概述什么是HTML&#xff1f;超文本标记语言 HTML基础结构文档声明根标签头部元素主体元素注释 HTML概念词汇&#xff1a;标签、属性、文本、元素HTML基本语法规则HTML常见标签标题标签段落标签换行标签列表标签超链接标签…...

磁盘的分区、格式化、检验与挂载 ---- fdisk,mkfs,mount

磁盘的分区、格式化、检验与挂载 磁盘管理是非常重要的&#xff0c;当我们想要再系统里面新增一块磁盘使用时&#xff0c;应执行如下几步&#xff1a; 对磁盘进行划分&#xff0c;以建立可用的硬盘分区 &#xff08;fdisk / gdisk&#xff09;对硬盘分区进行格式化&#xff0…...

Solr搜索参数详解

Solr 页面搜索 1.1 基本查询 参数意义q查询的关键字&#xff0c;此参数最为重要&#xff0c;例如&#xff0c;qid:1&#xff0c;默认为q:&#xff0c;fl指定返回哪些字段&#xff0c;用逗号或空格分隔&#xff0c;注意&#xff1a;字段区分大小写&#xff0c;例如&#xff0c;…...

Flink(三)【运行时架构】

前言 今天学习 Flink 的一些原理性的东西&#xff0c;比较偏概念&#xff0c;但是十分重要。有人觉得上来框框敲代码才能学到东西&#xff0c;那是狗屁不通的道理&#xff08;虽然我以前也这么认为&#xff09;。个人认为&#xff0c;学习 JavaEE那些框架&#xff0c;你上来就敲…...

conda添加清华镜像源

一、conda下载 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 显示所有channel conda config --show channels 二、添加清华镜像源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://…...

「Verilog学习笔记」求两个数的差值

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1ns module data_minus(input clk,input rst_n,input [7:0]a,input [7:0]b,output reg [8:0]c );always (posedge clk or negedge rst_n) begin if (~rst_…...

微头条项目实战:通过postman测试登录验证请求

1、CrosFilter package com.csdn.headline.filters; import jakarta.servlet.*; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class CrosFilter implements Filter {/*** 过滤器方法&#xff0c;用于处理HTTP请求* param servletReq…...

ARCGIS SERVER WMS、WFS服务添加过滤条件

我们知道geoserver中的wms&#xff0c;wfs过滤参数为cql_filter。比如过滤字段“mc”为"恒宇花园"的数据: cql_filtermc‘恒宇花园 但是arcgis server有所不同。具体可以看下它的标准&#xff1a;使用 WMS 请求中的 layerDefs 参数过滤要素—文档 | ArcGIS Enterpris…...

2013年108计网

第33题 在 OSI 参考模型中, 下列功能需由应用层的相邻层实现的是()A. 对话管理B. 数据格式转换C. 路由选择D. 可靠数据传输 很显然&#xff0c;题目所问的应用层的相邻层是表示层。该层实现与数据表示相关的功能。选项a中的对话管理属于会话层。选项c中的路由选择属于网络层。…...

【数据结构】单链表OJ题(一)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言一、移除链表元素二、寻找链表中间结点三、输出链表倒数第k个结点四、反转单链表五…...

2023年云计算发展趋势浅析

​​​​​​​ 云计算的概念 云计算是一种通过互联网提供计算资源和服务的模式。它允许用户通过网络访问和使用共享的计算资源&#xff0c;而无需拥有或管理这些资源的物理设备。云计算的核心理念是将计算能力、存储资源和应用程序提供给用户&#xff0c;以便随时随地根据需要…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…...

【Ftrace 专栏】Ftrace 参考博文

ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...