Selenium自动化测试面试必备:高频面试题及答案整理

自动化测试已经成为现代软件测试中不可或缺的一部分。在自动化测试中,Selenium是最受欢迎的工具之一,因为它可以模拟用户与Web应用程序的交互。因此,对于许多测试工程师来说,熟练掌握Selenium框架是非常重要的。如果你正在寻找一份自动化测试工作,那么你可能会被问到一些关于Selenium的面试问题。在本文中,我们将介绍一些最常见的Selenium自动化面试问题和答案,帮助你为面试做好准备。

1.什么是Selenium?
Selenium一个基于web的开源的UI自动化测试框架。Selenium支持大多数语言,如JavaPHPPythonPerlRuby等。因此成为测试专业人员中最受欢迎的工具之一。它是不同测试工具的组合,如Selenium IDESelenium RCWebDriverSelenium Grid

2.什么是Selenese?
Selenium命令通常被称为selenese,是用来运行测试的一个命令的集合。测试人员可以使用Selenese测试损坏的链接、UI上某些对象的存在、Ajax功能、弹窗、窗口、列表选项等等。

3.什么是Selenium 2.0?
它是Selenium RCWebDriver 的组合。

4.什么是Xpath?
它是XML文档中元素的路径。通过使用它,我们可以很容易地找出网页上的各种元素。如 //tagname[@attribute=’value’]

5.Selenium WebDriver 中的定位器是什么?
定位器用于识别网页上的元素。它是HTML网页的属性。我们使用不同类型的定位器来查找页面元素
● ID
● Name
● cssSelector
● Link text
● PartialLinkText
● ClassName
● tagName

6.绝对路径和相对路径有什么区别?
绝对路径以单个正斜杠 /开头,这意味着你可以从根节点选择元素,如html/body/div[4]/div[2]/a
相对路径以双正斜杠 //HTML 内容的中间开始。它比绝对路径小而健壮,如//*[@id=’Blog1′]/div[1]/a

7.Selenium 有哪些缺点?
1.Selenium只支持基于web的应用。
2.无法读取验证码。
3.Selenium 没有生成测试结果的内置工具。
4.由于 Selenium 是一个开源工具,所以它不提供任何技术支持。
5.Selenium 没有任何对象存储库,因此我们无法在其中维护对象。为了克服这个问题,我们使用页面对象模型概念。

8.Assert 和 Verify 有什么区别?
Assert:如果我们在测试脚本中使用Assert命令,那么如果有任何测试步骤失败,测试执行将停止。
Verify:它还用于验证测试步骤,但在任何时候测试步骤失败,测试执行将继续。

9.Selenium Webdriver 中的同步是什么?
有时Selenium比我们的Web应用程序更快,反之亦然。在这种情况下,我们必须管理两者的速度以运行我们的测试脚本。所以我们有不同的等待命令,比如隐式等待、显式等待等。

10.隐式等待和显式等待有什么区别?
隐式等待:为整个测试执行期间设置时间。例如,如果Selenium没有找到任何元素,那么它会在给定的时间段内等待元素。如果在给定时间内没有找到该元素,那么它将抛出异常ElementNotVisibleException

driver.manage().timeouts().implicitlyWait(20, TimeUnits.SECONDS);

显式等待:为特定的一个元素设置时间。如元素可见,按钮可点击等。如果我们为按钮设置显式等待20秒,然后Selenium为该按钮等待3秒。如果按钮在3秒内无法单击,则Selenium会抛出异常ElementNotVisibleException

WebDriverWait wait = new WebDriverWait(driver, 3);
wait.until(ExpectedConditions.elementToBeClickable(By.id(“id”)));

11.什么是 iframe 以及如何使用 Selenium 处理它?
iframe是一个网页,它是HTML页面的独立部分。iframe用于显示一些不同的东西,如广告等。对于 iframe,我们使用<iframe>标签。
如何处理iframe: 在处理iframe之前,我们首先应该知道如何识别任何网页中的iframe。因此,首先需要在网页中搜索iframe,如下图所示。

Selenium中可以用三种不同的方式来处理iframe

  1. By Name
    driver.switchTo().frame(“frameName”);
  2. By Index
    driver.switchTo().frame(indexOfFrame);
  3. 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类用于处理键盘事件、鼠标悬停事件(如拖放、回车、TabShift键等)。我们还可以双击任何元素,使用Action类右键单击任何元素。

Actions act = new Actions(driver);
// 鼠标悬停在元素上并单击它
act.moveToElement(element).click().build().perform();

注意:build 方法用于关闭所有系列的操作,而 perform 方法用于一次执行所有操作。

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();

19.如何处理Alert弹窗?
Selenium可以使用Alert类来处理JavaScript弹窗

// 在 alert 单击确定按钮
driver.switchTo().alert().aceept(); 
// 在 alert 单击取消按钮
driver.switchTo().alert().dismiss(); 
// 获取 alert 文本
String alerttext=driver.switchTo().alert().getText();

20.如何获取 Web 应用程序的页面标题?

String pagetitle = driver.getTitle();

21.如何在 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;}
}

21.如何断言提示框文本?
要验证提示框文本,我们必须将鼠标悬停在出现提示框的文本元素上,然后使用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);

22.Selenium可能出现的异常有哪些?
NoSuchElementException: 当 WebDriver无法使用指定的定位器找到网页上的元素时,会发生此异常。
ElementNotVisibleException: 当WebDriver无法与元素进行交互,因为该元素在网页上不可见时,会发生此异常。
TimeoutException: 当WebDriver无法在指定的时间限制内执行操作时,会发生此异常。
StaleElementReferenceException: 当WebDriver无法与元素进行交互,因为该元素不再附加到网页的DOM 上时,会发生此异常。
NoSuchFrameException: 当WebDriver无法使用指定的定位器找到网页上的框架时,会发生此异常。
InvalidSelectorException: 当指定的定位器策略无效或定位器语法不正确时,会发生此异常。
WebDriverException: 这是一种通用的异常情况,可能由各种原因引起,例如网络问题、服务器问题或浏览器崩溃等。

23.如何使用 Selenium 上传文件?
如果是input元素,可以通过使用sendKeys()方法,上传文件。在sendKeys中,只需要传文件路径+文件名即可。 但有时当我们点击上传文件按钮时,会打开弹出窗口以从Pc中选择文件。在这种情况下,sendKeys命令不起作用,所以我们可以使用第三方工具如:AutoItRobot 来上传文件。

https://mp.weixin.qq.com/s/70EJ36TDRyQMNhqGToEfTw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外汇天眼:Broadridge与Boring Money合作推出资产管理公司的消费者责任解决方案

Boring Money&#xff0c;一家金融数据和见解公司&#xff0c;与全球金融科技领导者Broadridge Financial Solutions, Inc. (NYSE:BR)合作&#xff0c;为资产管理公司提供了一个汇总产品分析和消费者视角的数据与见解的单一信息源&#xff0c;从而全面满足英国《消费者义务》法…

代码随想录算法训练营Day23|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

目录 669. 修剪二叉搜索树 前言 思路 递归法 108.将有序数组转换为二叉搜索树 前言 递归法 538.把二叉搜索树转换为累加树 前言 递归法 总结 669. 修剪二叉搜索树 题目链接 文章链接 前言 本题承接昨天二叉搜索树的插入和删除操作题目&#xff0c;要对整棵二叉搜索树…

Ubuntu16.04升级到18.04--检查更新时出现问题--解决方法

一开始装Ubuntu时装的是16.04&#xff0c;后来装cuda时&#xff0c;发现核是4.15的&#xff0c;需要升级到18.04&#xff0c;于是输入sudo do-release-upgrade更新时&#xff0c;发现错误&#xff1a; no module named DistUpgrade google后发现帖子&#xff1a; https://ask…

移动通信系统关键技术多址接入OFDM学习(7)

1.OFDM是一种多载波传输方案&#xff0c;可以将高速串行传输转换为低速并行传输&#xff0c;增加符号持续时间&#xff0c;抗多径干扰能力强。 串行和并行有着不同的比特持续时间&#xff0c;同时拥有相同的数据速率。因此&#xff0c;虽然OFDM将串行信号转换为并行信号&#…

HTTP基本概念

HTTP&#xff08;HyperText Transfer Protocol&#xff1a;超文本传输协议&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法&#xff0c;被用于在 Web 浏览器和网站服务器之间传递信息。 HTTP 默认工作在 TCP…

【数据库原理】(23)实际应用中的查询优化方法

一.基于索引的优化 索引是数据库查询优化的关键工具之一。合理地使用索引可以显著提高查询速度&#xff0c;降低全表扫描的成本。以下是建立和使用索引的一些基本原则和最佳实践。 索引的建立与使用原则 数据量规模与查询频率: 值得建立索引的表通常具有较多的记录&#xff0…

linux防火墙查看状态firewall、iptable

1、iptables防火墙 查看防火墙状态 service iptables status 停止防火墙 service iptables stop 启动防火墙 service iptables start 重启防火墙 service iptables restart 永久关闭防火墙 chkconfig iptables off 永久关闭后重启 chkconfig iptables on 开启80端…

【天龙怀旧服】攻略day5

关键字&#xff1a; 天鉴扫荡、举贤、燕子水路 1】85天鉴任务可以扫荡 在流派选择npc那里&#xff0c;花费40交子即可扫荡100点&#xff0c;可以兑换10个灵武打造图&#xff1b; 此外打造图绑定不影响做出来的灵武绑定&#xff0c;只要对应的玉不绑灵武就不绑定 2】冠绝师门…

报错java.lang.IllegalArgumentException: MALFORMED

java.lang.IllegalArgumentException: MALFORMEDat java.util.zip.ZipCoder.toString(ZipCoder.java:58)at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:300)at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:122)我是在解压压缩包文件的时候…

想要简化重复订单吗?不妨考虑一揽子采购订单

企业想提高采购流程效率&#xff0c;简化大批量采购是一个很好的开始。财务、会计和采购部门通过系统化订购大量物品&#xff08;如纸张、打印机墨水和墨粉、清洁用品、纸制品和其他易重复采购的消耗品&#xff09;可以节省时间和金钱。借助正确的采购订单&#xff08;PO&#…

android 重启

RescueParty 重启 Android之RescueParty机制 - 简书 01-10 16:39:15.421637 1268 1395 W RescueParty: Attempting rescue level RESET_SETTINGS_UNTRUSTED_DEFAULTS Line 90467: 01-10 16:39:15.422713 1268 1395 W RescueParty: Performing scoped reset for pack…

小程序基础学习(组件通信)

介绍 点击子组件的按钮&#xff0c;把点击事件发送给页面 例如&#xff1a;点击这个“最大的一头猪”&#xff0c;由组件内部设置点击事件然后在传递给页面。 实现原理 给组件内部需要点击的文本设置点击事件 在组件内部监听点击事件&#xff0c;并发送给页面点击事件的详细信…

一天一个设计模式---桥接模式

概念 桥接器模式是一种结构型设计模式&#xff0c;旨在将抽象部分与实现部分分离&#xff0c;使它们可以独立变化而不相互影响。桥接器模式通过创建一个桥接接口&#xff0c;连接抽象和实现&#xff0c;从而使两者可以独立演化。 具体内容 桥接器模式通常包括以下几个要素&a…

操作符之可选链和空值合并

可选链操作符 ?. 是 JavaScript 的 ECMAScript 2020 (ES11) 中引入的一项新特性。它的作用是在处理可能为 null 或 undefined 的对象属性或方法时&#xff0c;防止因为访问链中的某个属性或方法为 null 或 undefined 而导致的错误。可选链操作符的语法是 ?.。 让我们来看一个…

node运行 js报错 SyntaxError: Cannot use import statement outside a module

使用babel相关模块来进行转义支持&#xff0c;通过使用babel编译&#xff0c;使其转化为node.js的模块。 1、安装依赖 npm install --save babel-corenpm install --save babel-preset-env npm install babel-cli -g2、在根目录下创建 .babelrc文件。内容为&#xff1a; {&qu…

C# 学习笔记-001-继承

1&#xff0c;继承类型 继承的类型&#xff1a;实现继承和接口继承 实现继承&#xff1a; 表示一个类型派生于一个基类型&#xff0c;拥有改类型的所有成员字段和函数。 接口继承&#xff1a; 表示一个类型只继承了函数函数签名&#xff0c;没有继承任何实现代码。 2&#xff…

电调相关英文缩写ESC、BEC、PPM、Oneshot125、Oneshot42、Multishot、DShot、ProShot

ESC ESC全称是 Electronic Speed Control 中文翻译成电子调速器&#xff0c;就是电调 BEC BEC全称是 battey elimination circuit 中文翻译成免电池电路 可以理解就是对外供电&#xff0c;BEC就是线性稳压&#xff0c;降压用的&#xff0c;给接收机飞控供电 ESC协议 ESC协议…

Android14之解决Pixel手机联网出现感叹号(一百八十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

图解JVM (及一些垃圾回收\GC相关面试题 持续更新)

垃圾回收&#xff0c;顾名思义就是释放垃圾占用的空间&#xff0c;从而提升程序性能&#xff0c;防止内存泄露。当一个对象不再被需要时&#xff0c;该对象就需要被回收并释放空间。 Java 内存运行时数据区域包括程序计数器、虚拟机栈、本地方法栈、堆等区域。其中&#xff0c;…

牛客网BC93 公务员面试

描述&#xff1a; 公务员面试现场打分。有7位考官&#xff0c;从键盘输入若干组成绩&#xff0c;每组7个分数&#xff08;百分制&#xff09;&#xff0c;去掉一个最高分和一个最低分&#xff0c;输出每组的平均成绩。 输入描述&#xff1a; 每一行&#xff0c;输入7个整数&…