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

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

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

01 什么是Selenium?

Selenium一个基于web的开源的UI自动化测试框架。Selenium支持大多数语言,如JavaPHPPythonPerlRuby等。因此成为测试专业人员中最受欢迎的工具之一。它是不同测试工具的组合,如Selenium IDESelenium RCWebDriverSelenium 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。

 
  1. WebDriverWait wait = new WebDriverWait(driver, 3);

  2. 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类用于处理键盘事件、鼠标悬停事件(如拖放、回车、TabShift键等)。我们还可以双击任何元素,使用Action类右键单击任何元素。

 
  1. Actions act = new Actions(driver);

  2. // 鼠标悬停在元素上并单击它

  3. act.moveToElement(element).click().build().perform();

注意:Actions类中的build()和perform()是两个非常重要的方法,它们通常一起使用。build()方法用于构建要执行的所有操作序列,但是并不实际执行这些操作。如果在build()方法后没有调用perform()方法,那么这些操作将不会被执行。perform()方法用于实际执行在build()方法中构建的所有操作序列。当调用perform()方法时,Selenium会按照构建的序列依次执行每个操作。

18 如何从下拉列表中选择一个值?

通过使用Select类,有以下方法可以获取下拉列表的值。

  • selectByIndex()

  • selectByValue()

  • selectByVisibleText()

 
  1. WebElement element = driver.findElement(By.xpath(“xpath of city dropdown”));

  2. Select dropdownvalue = new Select(element);

  3. // 选择第二个下拉值 - Jaipur

  4. dropdownvalue.selectByIndex(1);

  5. dropdownvalue.selectByValue(“Jaipur”);

  6. dropdownvalue.selectByVisibleText(“Jaipur”);

19 get()和navigate()有什么区别?

  • get()方法用于导航到指定的URL,并等待页面加载完成。

driver.get(“https://www.cnblogs.com/mrjade”);
  • navigate()方法提供了一组导航方法,包括 back()forward() 和 refresh()。这些方法用于在浏览器历史记录中导航,或者刷新当前页面。

 
  1. driver.navigate().forward();

  2. driver.navigate().back();

  3. driver.navigate().refresh();

20 如何处理Alert弹窗?

Selenium可以使用Alert类来处理JavaScript弹窗

 
  1. // 在 alert 单击确定按钮

  2. driver.switchTo().alert().aceept();

  3. // 在 alert 单击取消按钮

  4. driver.switchTo().alert().dismiss();

  5. // 获取 alert 文本

  6. String alerttext = driver.switchTo().alert().getText();

21 如何获取Web应用程序页面标题?

String pagetitle = driver.getTitle();

22 如何在Selenium中处理多个窗口?

  • 获取当前窗口句柄。

  • 打开新窗口。

  • 获取所有窗口句柄列表。

  • 遍历窗口句柄列表,找到新窗口句柄。

  • 切换到新窗口。

  • 执行操作。

  • 切换回原来的窗口。

 
  1. // 获取当前窗口句柄

  2. String originalHandle = driver.getWindowHandle();

  3. // 点击“打开新窗口”链接

  4. driver.findElement(By.linkText("打开新窗口")).click();

  5. // 获取所有窗口句柄列表

  6. Set<String> handles = driver.getWindowHandles();

  7. / 遍历窗口句柄列表,找到新窗口句柄

  8. for (String handle : handles) {

  9. if (!handle.equals(originalHandle)) {

  10. driver.switchTo().window(handle);

  11. break;

  12. }

  13. }

23 如何断言提示框文本?

要验证提示框文本,我们必须将鼠标悬停在出现提示框的文本元素上,然后使用getAttribute()方法获取。

 
  1. WebElement element = driver.findElement(By.xpath(“xpath"));

  2. Action act = new Actions(driver);

  3. act.moveToElement(element).build().perform();

  4. // 获取提示文本

  5. tring tooltip_text = element.getAttribute(“title”)

  6. // 断言

  7. 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命令不起作用,所以我们可以使用第三方工具如:AutoItRobot 来上传文件。

 

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

相关文章:

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

自动化测试已经成为现代软件测试中不可或缺的一部分。在自动化测试中&#xff0c;Selenium是最受欢迎的工具之一&#xff0c;因为它可以模拟用户与Web应用程序的交互。因此&#xff0c;对于许多测试工程师来说&#xff0c;熟练掌握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还简单

前言 也不说那么多了&#xff0c;要用到bt&#xff0c;肯定也知道他是干嘛的&#xff0c;&#xff0c;给博主点点关注点点赞&#xff01;&#xff01;&#xff01;这样博主才能更新更多免费的教程&#xff0c;不然就直接丢付费专栏里了 正文 bt.Strategy 是 bt 库中用于定义交…...

网络安全宣传周 | DNS安全威胁与应对措施分享

随着网络技术的快速发展和国际形势的日趋复杂&#xff0c;网络安全问题日益凸显&#xff0c;网络安全威胁开始呈现多样化、隐蔽化、高频化、系统化的发展态势。黑客攻击、网络诈骗、数据泄露等事件频发&#xff0c;不仅威胁到个人隐私和财产安全&#xff0c;也严重影响到国家政…...

【图书介绍】《Altium Designer 24入门与案例实践(视频教学版)》

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

mysql事务的隔离级别学习

事务的隔离级别: ⅰ. 读未提交 ⅱ. 对已提交 &#xff08;解决 脏读&#xff09; ⅲ. 可重复读 &#xff08;解决 不可重复读&#xff09; ⅳ. 串行化 &#xff08;解决 脏读 不可重复读 幻读 问题 &#xff09; 隔离级别分类如下&#xff0c;在不同的隔离级别下可能产生不…...

Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)

前言 我在上一篇文章中《Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用&#xff08;text2sql&#xff09;》 利用langchain 中create_sql_agent 创建一个数据库代理智能体&#xff0c;但是实测中发现&#xff0c;使用 create_sql_agent 在对话中&#x…...

rapidocr 提取汇总

rapidocr介绍 A cross platform OCR Library based on OnnxRuntime. 以下资料是根据RapidOCR获得2024中国互联网发展创新与投资大赛(开源)二等奖整理汇编的 支持识别的文种如下: 中、英、日、韩、中文繁体、泰卢固文、卡纳达文、泰米尔文、拉丁文、 阿拉伯字母 、斯拉夫字…...

Linux:用户账号管理和组账号管理

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

MyBatis-Plus分页查询、分组查询

目录 准备工作1. 实体类2. Mapper类3. 分页插件4. 数据 分页查询1. 使用条件构造器2. 使用自定义sql 分组查询1. 分组结果类2. 自定义sql3. 测试类 准备工作 1. 实体类 对地址字段address使用字段类型转换器&#xff0c;将List转为字符串数组保存在数据库中 package com.exa…...

2024年9月HarmonyOS鸿蒙应用开发者高级认证全新题库(覆盖99%考题)

一个小时通过鸿蒙高级认证 1、在开发 Harmony0S 应用工程时&#xff0c; 随着业务的发展&#xff0c;现在需要创建一个模块&#xff0c; 关于在 DevEco Studio 中创建 Module &#xff0c; 下列选项哪种方式是错误的? 必对 在 hvigor 目录下&#xff0c;单击鼠标右键&#xf…...

大工程师插件下载 官方地址

https://download.3dsource.cn/3DSource_Client.exe...

rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链

前言 rtems 是一款比较优秀的 RTOS&#xff0c;官方网址 https://www.rtems.org/ 当前 rtems 最新发布的版本&#xff1a;rtems-5.3 版本&#xff0c; 下载地址 https://ftp.rtems.org/pub/rtems/releases/5/5.3/ rtems 支持的 平台也是比较多的&#xff0c;当前支持 STM32F4…...

【算法】栈与模拟

【ps】本篇有 5 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;删除字符串中的所有相邻重复项 .1- 题目解析 .2- 代码编写 2&#xff09;比较含退格的字符串 .1- 题目解析 .2- 代码编写 3&#xff09;基本计算器 II .1- 题目解析 .2- 代码编写 4&…...

【Django】Django AI 聊天机器人项目:基于 ChatGPT 的 Django REST API

Django AI 聊天机器人项目&#xff1a;基于 ChatGPT 的 Django REST API 本文档将介绍如何使用 Django 和 Django REST Framework 构建一个 AI 聊天机器人项目&#xff0c;并结合 OpenAI 的 GPT 模型提供代码解释服务。步骤包括创建 Django 项目、配置 API、与 OpenAI 集成&am…...

System.out源码解读——err 和 out 一起用导致的顺序异常Bug

前言 笔者在写一个小 Demo 的过程中&#xff0c;发现了一个奇怪的问题。问题如下&#xff1a; // 当 flagtrue 时打印 a1 &#xff1b;当 flagfalse 时打印 a2。 public static void main(String[] args) {boolean flag false;for (int i 0; i < 10; i) {if (flag) {Sys…...

汽车软件开发之敏捷开发

一、前言 目前汽车电子产品&#xff0c;特别是汽车几大域控&#xff08;如&#xff1a;智能座舱、智能驾驶、智能网联、车身控制&#xff09;市场竞争激烈&#xff0c;消费者对汽车的需求逐渐多元化和个性化&#xff0c;用户对座舱和智驾产品的要求也越来越高。他们不仅要求产…...

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中&#xff0c;你可以使用DATE_FORMAT()函数来格式化日期。DATE_FORMAT() 函数通常用于格式化 DATETIME 或 TIMESTAMP类型的字段。这个函数允许你按照指定的格式来显示日期和时间。下面是一些常见的日期格式化的例子&#xff1a; 显示年-月-日&#xff1a; SELECT DATE_…...

时钟频率、AI采样率与AO更新率的关系

在数据采集和信号生成设备&#xff08;如NI板卡&#xff09;中&#xff0c;时钟频率、AI&#xff08;模拟输入&#xff09;采样率、以及AO&#xff08;模拟输出&#xff09;更新率是三个至关重要的参数。它们共同决定了设备在信号采集与生成时的性能表现。本文将详细分析它们之…...

代理IP设置后IP不变?可能的原因及解决方法

在使用代理IP时&#xff0c;有时会遇到代理设置后IP地址却没有变化的情况。这种问题可能会让人感到困惑&#xff0c;但其实背后有多种原因。本文将详细探讨这些原因&#xff0c;并提供相应的解决方法&#xff0c;帮助你顺利解决问题。 可能的原因 代理IP设置后IP地址不变的原…...

瑞芯微RK3588开发板Linux系统添加自启动命令的方法,深圳触觉智能Arm嵌入式鸿蒙硬件方案商

本文适用于触觉智能所有Linux系统的开发板、主板添加自启动命令的方法&#xff0c;本次使用了触觉智能的EVB3588开发板演示&#xff0c;搭载了瑞芯微RK3588旗舰芯片。 该开发板为核心板加底板设计&#xff0c;为工业场景设计研发的模块化产品&#xff0c;10年以上稳定供货,帮助…...

Varjo在芬兰开设新工厂,以满足国防部门在XR模拟训练中的需求

在军事国防领域&#xff0c;全新技术的投入使用最看重的就是保密与安全。作为全球领先的XR头戴式显示器提供商Varjo&#xff0c;近日正式宣布将在位于芬兰的赫尔辛基开设一家新的安全制造工厂。 此次工厂扩建将使Varjo能够满足国防训练和模拟领域对其高分辨率XR解决方案日益增…...

python 识别省市、区县并组建三级信息数据库

一、网址&#xff1a; 全国行政区划信息查询平台 二、分析并搭建框架 检查网页源码&#xff1a; 检查网页源码可以发现&#xff1a; 所有省级信息全部在javaScript下的json中&#xff0c;会在页面加载时加载json数据&#xff0c;填充到页面的option中。 1、第一步&#xff1a…...

家用小型超声波清洗机怎么选?四大人气爆款品牌不可错过!

在现代社会快节奏的步伐中&#xff0c;保持高度的个人及家居卫生标准成为了日常生活的重要组成部分&#xff0c;对于追求高端生活品质的人群而言&#xff0c;这一点尤为重要。因此&#xff0c;选取一款集高效与便利于一体的超声波清洗机&#xff0c;无疑是升级日常清洁体验的理…...

NVIDIA最新AI论文介绍NEST:一种用于语音处理的快速高效自监督模型

语音处理专注于开发能够分析、解释和生成人类语音的系统。这些技术涵盖了多种应用&#xff0c;例如自动语音识别&#xff08;ASR&#xff09;、说话人验证、语音转文本翻译以及说话人分离。随着对虚拟助手、转录服务和多语言交流工具的依赖不断增加&#xff0c;高效准确的语音处…...

聊聊对别人表示真正的关注

在工作和生活中,那些重要人士所得到的关注已经很多了&#xff0c;所以你不能只关注那些重要的人&#xff0c;对那些保洁门卫、前台等也需要我们给予真心的关注。 他们可使你的生活正常有序&#xff0c;但却经常被你忽略&#xff0c;见面打个招呼时常跟他们聊一聊&#xff0c;这…...

大数据-133 - ClickHouse 基础概述 全面了解

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

第1步win10宿主机与虚拟机通过NAT共享上网互通

VM的CentOS采用NAT共用宿主机网卡宿主机器无法连接到虚拟CentOS 要实现宿主机与虚拟机通信&#xff0c;原理就是给宿主机的网卡配置一个与虚拟机网关相同网段的IP地址&#xff0c;实现可以互通。 1、查看虚拟机的IP地址 2、编辑虚拟机的虚拟网络的NAT和DHCP的配置&#xff0c;…...

Python学习——【2.3】for循环

文章目录 【2.3】for循环一、for循环基础语法&#xff08;一&#xff09;基础语法※、练习 &#xff08;二&#xff09;range语句※、练习 &#xff08;三&#xff09;变量作用域 二、for循环嵌套使用※、练习 【2.3】for循环 一、for循环基础语法 &#xff08;一&#xff09…...