Selenium自动化测试面试必备:高频面试题及答案整理
自动化测试已经成为现代软件测试中不可或缺的一部分。在自动化测试中,Selenium
是最受欢迎的工具之一,因为它可以模拟用户与Web
应用程序的交互。因此,对于许多测试工程师来说,熟练掌握Selenium
框架是非常重要的。如果你正在寻找一份自动化测试工作,那么你可能会被问到一些关于Selenium
的面试问题。在本文中,我们将介绍一些最常见的Selenium
自动化面试问题和答案,帮助你为面试做好准备。
01 什么是Selenium?
Selenium
一个基于web
的开源的UI
自动化测试框架。Selenium
支持大多数语言,如Java
、PHP
、Python
、Perl
、Ruby
等。因此成为测试专业人员中最受欢迎的工具之一。它是不同测试工具的组合,如Selenium IDE
、Selenium RC
、WebDriver
和Selenium Grid
。
02 什么是Selenese?
Selenium
命令通常被称为selenese
,是用来运行测试的一个命令的集合。测试人员可以使用Selenese
测试损坏的链接、UI
上某些对象的存在、Ajax
功能、弹窗、窗口、列表选项等等。
03 什么是Selenium 2.0?
它是Selenium RC
和 WebDriver
的组合。
04 什么是Xpath?
它是XML
文档中元素的路径。通过使用它,我们可以很容易地找出网页上的各种元素。如//tagname[@attribute=’value’]
05 Selenium WebDriver 中的定位器是什么?
定位器用于识别网页上的元素。它是HTML
网页的属性。我们使用不同类型的定位器来查找页面元素,例如:
-
ID
-
Name
-
cssSelector
-
Link text
-
PartialLinkText
-
ClassName
-
tagName
06 绝对路径和相对路径有什么区别?
1.绝对路径以单个正斜杠/
开头,这意味着你可以从根节点选择元素,
如html/body/div[4]/div[2]/a
。
2.相对路径以双正斜杠//
和HTML
内容的中间开始。它比绝对路径小而健壮,
如//*[@id=’Blog1′]/div[1]/a
。
07 Selenium 有哪些缺点?
1.Selenium
只支持基于web
的应用。
2.无法读取验证码。
3.Selenium
没有生成测试结果的内置工具。
4.由于 Selenium
是一个开源工具,所以它不提供任何技术支持。
5.Selenium
没有任何对象存储库,因此我们无法在其中维护对象。为了克服这个问题,我们使用页面对象模型概念。
08 Assert 和 Verify 有什么区别?
1.Assert
:如果我们在测试脚本中使用Assert
命令,那么如果有任何测试步骤失败,测试执行将停止。
2.Verify
:它还用于验证测试步骤,但在任何时候测试步骤失败,测试执行将继续。
09 Selenium Webdriver中的同步是什么?
有时Selenium
比我们的Web
应用程序更快,反之亦然。在这种情况下,我们必须管理两者的速度以运行我们的测试脚本。所以我们有不同的等待命令,比如隐式等待、显式等待等。
10 隐式等待和显式等待有什么区别?
隐式等待:为整个测试执行期间设置时间。例如,如果Selenium
没有找到任何元素,那么它会在给定的时间段内等待元素。如果在给定时间内没有找到该元素,那么它将抛出异常ElementNotVisibleException。
driver.manage().timeouts().implicitlyWait(20, TimeUnits.SECONDS);
显式等待:为特定的一个元素设置时间。如元素可见,按钮可点击等。如果我们为按钮设置显式等待3
秒,然后Selenium
为该按钮等待3
秒。如果按钮在3
秒内无法单击,则Selenium
会抛出异常ElementNotVisibleException。
-
WebDriverWait wait = new WebDriverWait(driver, 3);
-
wait.until(ExpectedConditions.elementToBeClickable(By.id(“id”)));
11 什么是iframe以及如何定位?
1.iframe
是一个网页,它是HTML
页面的独立部分。iframe
用于显示一些不同的东西,如广告等。对于 iframe
,我们使用<iframe>
标签。
2.如何处理iframe
:在处理iframe
之前,我们首先应该知道如何识别任何网页中的iframe
。因此,首先需要在网页中搜索iframe
,如下图所示。
在Selenium
中可以用三种不同的方式来处理iframe
:
-
By Name
driver.switchTo().frame(“frameName”);
-
By Index
driver.switchTo().frame(indexOfFrame);
-
By WebElement
driver.switchTo().frame(“xpath of frame “);
12 Webdriver有哪些不同类型的驱动程序?
-
FirefoxDriver
-
ChromeDriver
-
InternetExplorerDriver
-
SafariDriver
-
OperaDriver
-
AndriodDriver
-
IPhoneDriver
-
HtmlUnitDriver
13 如何断言是否选中了复选框?
可以使用isSelected()
方法
driver.findElement(By.xpath(“locator of Checkbox”)).isSelected();
14 如何断言按钮是否启用?
可以使用isEnabled()
方法
driver.findElement(By.xpath(“locator of button”)).isEnabled();
15 如何断言元素是否可见?
可以使用isDisplayed()
方法
driver.findElement(By.xpath(“locator of web element”)).isDisplayed();
16 如何从文本框中获取文本?
可以使用getText()
方法
driver.findElement(By.xpath(“xpath of textbox”)).getText();
17 什么是动作类(Actions)?
Actions
类用于处理键盘事件、鼠标悬停事件(如拖放、回车、Tab
、Shift
键等)。我们还可以双击任何元素,使用Action
类右键单击任何元素。
-
Actions act = new Actions(driver);
-
// 鼠标悬停在元素上并单击它
-
act.moveToElement(element).click().build().perform();
注意:Actions类中的build()和perform()是两个非常重要的方法,它们通常一起使用。build()方法用于构建要执行的所有操作序列,但是并不实际执行这些操作。如果在build()方法后没有调用perform()方法,那么这些操作将不会被执行。perform()方法用于实际执行在build()方法中构建的所有操作序列。当调用perform()方法时,Selenium会按照构建的序列依次执行每个操作。
18 如何从下拉列表中选择一个值?
通过使用Select
类,有以下方法可以获取下拉列表的值。
-
selectByIndex()
-
selectByValue()
-
selectByVisibleText()
-
WebElement element = driver.findElement(By.xpath(“xpath of city dropdown”));
-
Select dropdownvalue = new Select(element);
-
// 选择第二个下拉值 - Jaipur
-
dropdownvalue.selectByIndex(1);
-
dropdownvalue.selectByValue(“Jaipur”);
-
dropdownvalue.selectByVisibleText(“Jaipur”);
19 get()和navigate()有什么区别?
-
get()
方法用于导航到指定的URL
,并等待页面加载完成。
driver.get(“https://www.cnblogs.com/mrjade”);
-
navigate()
方法提供了一组导航方法,包括back()
、forward()
和refresh()
。这些方法用于在浏览器历史记录中导航,或者刷新当前页面。
-
driver.navigate().forward();
-
driver.navigate().back();
-
driver.navigate().refresh();
20 如何处理Alert弹窗?
Selenium
可以使用Alert
类来处理JavaScript
弹窗
-
// 在 alert 单击确定按钮
-
driver.switchTo().alert().aceept();
-
// 在 alert 单击取消按钮
-
driver.switchTo().alert().dismiss();
-
// 获取 alert 文本
-
String alerttext = driver.switchTo().alert().getText();
21 如何获取Web应用程序页面标题?
String pagetitle = driver.getTitle();
22 如何在Selenium中处理多个窗口?
-
获取当前窗口句柄。
-
打开新窗口。
-
获取所有窗口句柄列表。
-
遍历窗口句柄列表,找到新窗口句柄。
-
切换到新窗口。
-
执行操作。
-
切换回原来的窗口。
-
// 获取当前窗口句柄
-
String originalHandle = driver.getWindowHandle();
-
// 点击“打开新窗口”链接
-
driver.findElement(By.linkText("打开新窗口")).click();
-
// 获取所有窗口句柄列表
-
Set<String> handles = driver.getWindowHandles();
-
/ 遍历窗口句柄列表,找到新窗口句柄
-
for (String handle : handles) {
-
if (!handle.equals(originalHandle)) {
-
driver.switchTo().window(handle);
-
break;
-
}
-
}
23 如何断言提示框文本?
要验证提示框文本,我们必须将鼠标悬停在出现提示框的文本元素上,然后使用getAttribute()
方法获取。
-
WebElement element = driver.findElement(By.xpath(“xpath"));
-
Action act = new Actions(driver);
-
act.moveToElement(element).build().perform();
-
// 获取提示文本
-
tring tooltip_text = element.getAttribute(“title”)
-
// 断言
-
Assert.assertEquals(“mrjade”, tooltip_text);
24 如Selenium可能出现的异常有哪些?
-
NoSuchElementException:当
WebDriver
无法使用指定的定位器找到网页上的元素时,会发生此异常。 -
ElementNotVisibleException:当
WebDriver
无法与元素进行交互,因为该元素在网页上不可见时,会发生此异常。 -
TimeoutException:当
WebDriver
无法在指定的时间限制内执行操作时,会发生此异常。 -
StaleElementReferenceException:当
WebDriver
无法与元素进行交互,因为该元素不再附加到网页的DOM
上时,会发生此异常。 -
NoSuchFrameException:当
WebDriver
无法使用指定的定位器找到网页上的框架时,会发生此异常。 -
InvalidSelectorException:当指定的定位器策略无效或定位器语法不正确时,会发生此异常。
-
WebDriverException:这是一种通用的异常情况,可能由各种原因引起,例如网络问题、服务器问题或浏览器崩溃等。
25 如何使用Selenium上传文件?
如果是input
元素,可以通过使用sendKeys()
方法,上传文件。在sendKeys
中,只需要传文件路径+文件名即可。但有时当我们点击上传文件按钮时,会打开弹出窗口以从Pc
中选择文件。在这种情况下,sendKeys
命令不起作用,所以我们可以使用第三方工具如:AutoIt
,Robot
来上传文件。
感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取
相关文章:

Selenium自动化测试面试必备:高频面试题及答案整理
自动化测试已经成为现代软件测试中不可或缺的一部分。在自动化测试中,Selenium是最受欢迎的工具之一,因为它可以模拟用户与Web应用程序的交互。因此,对于许多测试工程师来说,熟练掌握Selenium框架是非常重要的。如果你正在寻找一份…...

kettle 数据库迁移 使用分页原理实现 数据库mysql
使用 kettle 9.0 先修改配置文件: C:\Users\xx\.kettle 新增如下配置,解决mysql 空字符串 自动转 null bug KETTLE_EMPTY_STRING_DIFFERS_FROM_NULLY git地址: GitHub - 2292011451/kettle_tool 第一步: 先把要迁移的表进行读取,循环查询每个表的最大数量以及页数,追加到…...
量化回测bt框架,策略类bt.Strategy详解,不是backtrader!提供bt双均线策略示例,比backtrader还简单
前言 也不说那么多了,要用到bt,肯定也知道他是干嘛的,,给博主点点关注点点赞!!!这样博主才能更新更多免费的教程,不然就直接丢付费专栏里了 正文 bt.Strategy 是 bt 库中用于定义交…...
网络安全宣传周 | DNS安全威胁与应对措施分享
随着网络技术的快速发展和国际形势的日趋复杂,网络安全问题日益凸显,网络安全威胁开始呈现多样化、隐蔽化、高频化、系统化的发展态势。黑客攻击、网络诈骗、数据泄露等事件频发,不仅威胁到个人隐私和财产安全,也严重影响到国家政…...

【图书介绍】《Altium Designer 24入门与案例实践(视频教学版)》
本书重点 配套资源丰富,包括示例源文件、PPT课件、教学视频、电子教案、课程标准、教学大纲、模拟试题、作者微信群答疑服务。 内容简介 《Altium Designer 24入门与案例实践:视频教学版》以当前**的板卡级设计软件Altium Designer 24为基础,全面讲述…...

mysql事务的隔离级别学习
事务的隔离级别: ⅰ. 读未提交 ⅱ. 对已提交 (解决 脏读) ⅲ. 可重复读 (解决 不可重复读) ⅳ. 串行化 (解决 脏读 不可重复读 幻读 问题 ) 隔离级别分类如下,在不同的隔离级别下可能产生不…...

Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)
前言 我在上一篇文章中《Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用(text2sql)》 利用langchain 中create_sql_agent 创建一个数据库代理智能体,但是实测中发现,使用 create_sql_agent 在对话中&#x…...
rapidocr 提取汇总
rapidocr介绍 A cross platform OCR Library based on OnnxRuntime. 以下资料是根据RapidOCR获得2024中国互联网发展创新与投资大赛(开源)二等奖整理汇编的 支持识别的文种如下: 中、英、日、韩、中文繁体、泰卢固文、卡纳达文、泰米尔文、拉丁文、 阿拉伯字母 、斯拉夫字…...

Linux:用户账号管理和组账号管理
用户账号管理 账号控制总述 用户账户 作用: 1.可以登陆操作系统 2.不同的用户具备不同的权限 唯一标识:UID(编号从0开始的编号,默认最大60000)zhangsan(UID 1200) 管理员root的UID:永远为0 系统用户(为程…...

MyBatis-Plus分页查询、分组查询
目录 准备工作1. 实体类2. Mapper类3. 分页插件4. 数据 分页查询1. 使用条件构造器2. 使用自定义sql 分组查询1. 分组结果类2. 自定义sql3. 测试类 准备工作 1. 实体类 对地址字段address使用字段类型转换器,将List转为字符串数组保存在数据库中 package com.exa…...
2024年9月HarmonyOS鸿蒙应用开发者高级认证全新题库(覆盖99%考题)
一个小时通过鸿蒙高级认证 1、在开发 Harmony0S 应用工程时, 随着业务的发展,现在需要创建一个模块, 关于在 DevEco Studio 中创建 Module , 下列选项哪种方式是错误的? 必对 在 hvigor 目录下,单击鼠标右键…...

大工程师插件下载 官方地址
https://download.3dsource.cn/3DSource_Client.exe...

rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链
前言 rtems 是一款比较优秀的 RTOS,官方网址 https://www.rtems.org/ 当前 rtems 最新发布的版本:rtems-5.3 版本, 下载地址 https://ftp.rtems.org/pub/rtems/releases/5/5.3/ rtems 支持的 平台也是比较多的,当前支持 STM32F4…...

【算法】栈与模拟
【ps】本篇有 5 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)删除字符串中的所有相邻重复项 .1- 题目解析 .2- 代码编写 2)比较含退格的字符串 .1- 题目解析 .2- 代码编写 3)基本计算器 II .1- 题目解析 .2- 代码编写 4&…...
【Django】Django AI 聊天机器人项目:基于 ChatGPT 的 Django REST API
Django AI 聊天机器人项目:基于 ChatGPT 的 Django REST API 本文档将介绍如何使用 Django 和 Django REST Framework 构建一个 AI 聊天机器人项目,并结合 OpenAI 的 GPT 模型提供代码解释服务。步骤包括创建 Django 项目、配置 API、与 OpenAI 集成&am…...

System.out源码解读——err 和 out 一起用导致的顺序异常Bug
前言 笔者在写一个小 Demo 的过程中,发现了一个奇怪的问题。问题如下: // 当 flagtrue 时打印 a1 ;当 flagfalse 时打印 a2。 public static void main(String[] args) {boolean flag false;for (int i 0; i < 10; i) {if (flag) {Sys…...

汽车软件开发之敏捷开发
一、前言 目前汽车电子产品,特别是汽车几大域控(如:智能座舱、智能驾驶、智能网联、车身控制)市场竞争激烈,消费者对汽车的需求逐渐多元化和个性化,用户对座舱和智驾产品的要求也越来越高。他们不仅要求产…...

ListBox显示最新数据、左移和右移操作
1、程序 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static Sys…...
mysql实用系列:日期格式化
在MySQL中,你可以使用DATE_FORMAT()函数来格式化日期。DATE_FORMAT() 函数通常用于格式化 DATETIME 或 TIMESTAMP类型的字段。这个函数允许你按照指定的格式来显示日期和时间。下面是一些常见的日期格式化的例子: 显示年-月-日: SELECT DATE_…...

时钟频率、AI采样率与AO更新率的关系
在数据采集和信号生成设备(如NI板卡)中,时钟频率、AI(模拟输入)采样率、以及AO(模拟输出)更新率是三个至关重要的参数。它们共同决定了设备在信号采集与生成时的性能表现。本文将详细分析它们之…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...