为什么要学Selenium自动化测试?

news2024/12/17 10:50:37

 开发人员在编写代码时总是会考虑到不同的应用场景,但也可能会出现实现效果不如预期的情况。同样的原则也适用于测试代码,编写测试代码的主要目的是测试现有产品的功能、发现错误并使产品100%无错误。

  有句话说得好:"真相总是比小说更离奇",而在执行 Selenium 测试自动化时,你会看到很多 "离奇的事情"。执行测试代码时遇到的这些事情或场景可能不是很常见,但测试实现应该足够强大以处理此类场景。这些场景被恰当地称为异常,在使用 Selenium 进行自动化浏览器测试时,您会遇到许多此类异常。

  Selenium 异常广泛用于处理错误场景和避免 Web 应用程序故障。尽管所有Selenium WebDriver代码中都可能发生许多 Selenium 异常,但有些 Selenium 异常是该框架支持的编程语言(如 Java、C#、Python 等)特有的。

  本文涵盖了常见的Selenium异常以及特定语言的异常,希望在你遇到代码异常时有所帮助,对执行自动化浏览器测试相关场景时经常使用的Selenium异常情况有一个全面的了解。

  一、Selenium 异常简介

  异常(也称为故障)是程序执行过程中发生的未出现的事件。当异常发生时,正常的程序执行会停止,并执行相应的异常处理程序。如果没有异常处理程序来处理该特定异常,程序将返回到引发异常的调用函数,最终导致程序终止。

  由于 Selenium 测试自动化是在不同的目标平台、设备和Web浏览器上执行的,测试代码的行为可能因浏览器类型或浏览器版本而异。例如,某些属性可能是浏览器特定的,并且如果执行自动浏览器测试的浏览器中不存在特定属性,则抛出异常。通用属性名称也可以是特定于浏览器的,如果目标浏览器上不存在相同的属性,则可能会导致 Selenium 异常,例如 NoSuchAttributeException。

  正确处理异常当然很重要,因为未处理的异常可能会导致程序失败,最终影响产品体验。异常对象包含有关异常类型、调用堆栈和其他有用信息的信息,这些信息将有助于调试并使代码更加万无一失。

  二、Selenium异常的类别

  Selenium 异常分为两大类:已检查异常(Checked exceptions)和未检查异常(Unchecked exceptions)。这些异常根据捕获异常的时间(即编译时或运行时)进行分类。

  A. 检查异常

  Selenium测试自动化中的检查异常是在测试代码实现过程中处理的,例如 NoSuchAttributeException等,检查异常的处理发生在编译时本身。

  程序。如果某些方法会抛出检查异常,最好定义一个处理程序来处理该异常。

  B. 未经检查的异常

  Selenium 测试自动化中的未检查异常在运行时发生,并且可能比检查异常产生更严重的影响。例如 ElementNotVisibleException、MoveTargetOutOfBoundsException 等。

  Java中的异常可以被检查或取消检查,而在C++中,所有异常都是未检查的。在自动化浏览器测试相关场景中,通常会遇到未经检查的异常,因为测试跨越不同的Web浏览器和操作系统组合和版本。

  三、常见的Selenium 异常

  在本地或远程 Selenium 网格上执行自动化浏览器测试时,你会遇到不同类型的异常。一些 Selenium 异常特定于用于编写Selenium测试自动化场景的编程语言。

  以下是所有Selenium WebDriver代码中可能发生的一些常见Selenium异常:

  1. ElementClickInterceptedException(元素点击拦截异常)

  由于接收Click命令的元素以某种方式隐藏,因此无法正确执行Element Click命令。

  2. ElementNotInteractableException(元素不可交互异常)

  即使目标 Web 元素存在于 DOM 上,但与该元素的交互将命中另一个 Web 元素时,也会引发“ElementNotInteractableException”Selenium 异常。

  3. ElementNotSelectableException(元素不可选异常)

  当目标元素存在于 DOM 上但由于该元素不可选择而无法与之交互时,会发生此 Selenium 异常。例如,与 script 元素交互时会抛出此异常。

  4. ElementNotVisibleException(元素不可见异常)

  最常见的 Selenium 异常类型,即使 Web 元素存在但不可见时也会抛出该异常。由于该元素不可见,因此不可能与该元素进行任何交互。

  这种情况在 Selenium 测试自动化中经常遇到,其中尝试对 Web 元素(例如按钮、标签等)进行相关操作(单击、读取等),但该元素在视图中隐藏。另一个示例是 HTML 中定义的隐藏类型的元素。

  5. ErrorInResponseException

  当服务器端发生某些问题或错误时,会抛出此 Selenium 异常。当使用错误的用户名和访问密钥组合来访问基于云的远程 Selenium Grid、与远程 Web 驱动程序服务器通信或与 Firefox 扩展(或 Chrome 插件)通信时,可能会发生这种情况。

  服务器端错误的一些常见响应代码如下:

  401 — Unauthorized(未授权)

  400 — BadRequest(错误请求)

  500 — InternalServerError(内部服务器错误)

  409 — Conflict(冲突)

  403 — Forbidden(禁止)

  405 — MethodNotAllowed(方法不允许)

  6. ImeActivationFailedException(输入法引擎激活失败异常)

  如果IME(输入法引擎)由于某种原因激活失败,则抛出此异常。

  处理此问题的理想方法是检查计算机上是否有 IME 支持。

  7. ImeNotAvailableException(输入法不可用异常)

  如果 IME(输入法引擎)不可用,则抛出此 Selenium 异常。如果测试机器上不提供 IME 支持,则每个 IME 相关方法都会引发 ImeNotAvailableException。

  8. InsecureCertificateException(不安全证书异常)

  使用过期或无效的 TLS 证书导致用户代理发出证书警告。

  9. NoSuchFrameException

  当要切换到的框架不存在时,就会抛出 NoSuchFrameException Selenium 异常。

  为避免此类 Selenium 异常,建议在自动浏览器测试代码中添加有关切换到框架模式的正确性检查。检查使用的框架索引是否正确。可添加几毫秒(ms)的额外等待,以确保框架加载完成。

  10. NoSuchWindowException

  当切换到的窗口目标不存在时抛出此异常。这些情况可以通过使用 window_handles 来处理,以获得当前的活动窗口集。窗口句柄可用于在其上执行适当的操作。

  11. RemoteDriverServerException(远程驱动服务器异常)

  当浏览器功能中的错误组合/字段导致服务器不发送响应时,抛出此异常。为了避免此类 Selenium 异常,从(平台 + 浏览器)、(平台 + 浏览器 + 浏览器版本)等有效组合的角度彻底检查 Selenium 浏览器功能非常重要。

  12. ScreenshotException(截屏异常)

  顾名思义,当无法捕获屏幕时会抛出此 Selenium 异常。这种情况很可能出现在用户输入敏感信息(例如用户名、密码、银行信息等)的网页/Web 应用程序中。在这种情况下,由于屏幕截图限制而无法捕获屏幕。在这里,屏幕截图限制会阻止屏幕被捕获或记录

  13. SessionNotCreatedException

  当新会话创建不成功时会出现此异常。

  14. InvalidArgumentException(无效参数异常)

  当传递的参数无效或格式错误时,将引发 InvalidArgumentException 异常。

  更好的做法是在 Selenium 测试自动化代码中使用适当的等待(以毫秒为单位)来验证被测网页是否已加载。

  15. InvalidCookieDomainException

  当尝试为与当前 URL 不同的 URL/域添加 cookie 时,会引发此 Selenium 异常。

  要处理此异常,应该导航到必须添加 cookie 的正确 URL。

  16. InvalidCooperativesException(无效坐标异常)

  当向交互操作提供不正确的坐标时,会引发此特定异常。这也意味着依赖于鼠标位置的操作(例如单击)之前没有移动操作,或者为移动操作提供了无效的坐标。

  17. InvalidElementStateException(无效元素状态异常)

  当由于元素未处于有效状态或元素未启用执行该操作而无法完成命令时,将引发此 Selenium 异常。如果在不可编辑且不可重置的 Web 元素上尝试执行诸如清除元素之类的操作,则可能会导致这种情况。

  要在 Selenium 测试自动化中处理此类异常,建议先等待该元素启用,然后再对其执行所需的操作。

  18. InvalidSelectorException(无效选择器异常)

  如果在不同版本之间更改了选择器名称,就可能意外使用无效或不正确的选择器来定位 Web 元素。如果用于查找 Web 元素的选择器没有返回 WebElement,就会产生 InvalidSelectorException 异常。

  这种情况通常发生在选择器是 XPath 表达式且 XPath 无效的情况下。这将导致无法找到目标网页元素。

  19. InvalidSessionIdException(无效会话标识异常)

  如果 Selenium 测试自动化实现中使用的会话 ID 无效,即不在当前活动会话列表中,则会抛出此异常。如果会话不活动或从未存在过,就会发生这种情况。

  20. InvalidSwitchToTargetException(无效目标切换异常)

  如果切换到的框架或窗口目标无效,则会出现此 Selenium 异常。在切换到该框架之前,使用“检查工具”验证目标框架的 XPath 非常重要。

  21. JavascriptException

  当执行 JavaScript 代码出现问题时抛出此异常。

  22. NoAlertPresentException(无警报显示异常)

  当切换到屏幕上尚未出现的警报时会发生该异常。处理警报的理想方法是检查警报是否存在,然后调用 Alert() 类上所需的操作。

  23. MoveTargetOutOfBoundsException(移动目标超出边界异常)

  如果提供给 ActionChains() 移动方法的目标超出范围,即无效或在文档/网页之外,就会出现 Selenium 异常。

  在调用 ActionChains() 类的 move 方法之前,应始终检查我们试图移动的位置,只有当该位置出现在屏幕上时才执行相同的操作。

  24. NoSuchAttributeException(无属性异常)

  这是在进行自动化浏览器测试时一定会遇到的少数 Selenium 异常之一。如果无法找到元素的属性,就会抛出 NoSuchAttributeException 异常。

  要处理此异常,应针对执行测试的浏览器检查属性是否存在。不同浏览器中同一属性的不同属性名可能各不相同,如果处理效率低下,就会导致此异常。

  避免发生此异常的另一种方法是根据 DOM 上元素的新细节更改属性。

  25. NoSuchCookieException(无Cookie异常)

  当当前浏览上下文活动文档的关联 Cookie 中不存在与给定路径名匹配的 Cookie 时,就会出现 Selenium 异常。

  26. NoSuchElementException(无元素异常)

  当用于访问元素的定位器无效,或试图对一个不在 DOM 中的元素执行操作时,Selenium 会抛出 NoSuchElementException 异常。在这两种情况下,都找不到元素。

  要处理 Selenium 异常,应检查选择器是否正确,如果正确,则需要额外等待以确保 WebElement 的出现。

  27. StaleElementReferenceException(陈旧元素引用异常)

  当引用的元素已不在页面的 DOM 中时,会出现 Selenium 异常。简单地说,该元素已经衰减或过时。

  导致这种特殊 Selenium 异常的一些可能原因有:

  ·元素可能在一个被刷新的 iFrame 中。

  · 页面可能已经刷新,要访问的元素不再是当前页面的一部分。

  · 该元素可能已被移除并重新添加到屏幕上,因为该元素已被定位。

  处理此异常的一个可行解决方案是使用动态 XPath 在循环中查找所需元素,并在找到元素后中断循环。

  28. TimeoutException(超时异常)

  若当前正在执行的命令没有在预期时间内完成时,就会出现超时异常。

  处理这种异常的一个可行办法是增加命令完成执行的等待时间。不过,应该为等待时间选择一个理想值,否则可能会延迟进一步执行。

  29. UnableToSetCookieException(无法设置Cookie异常)

  当Selenium WebDriver 无法设置 cookie 时会出现这种 Selenium 异常。

  可以添加额外的等待时间,以便为域加载 cookie。

  30. UnexpectedAlertPresentException( 意外警报出现异常)

  当出现意外警报时发生。发生此异常的一个常见原因是页面上出现模式窗口/弹出窗口导致 Selenium WebDriver 命令被阻止。

  31. UnexpectedTagNameException(标签名称异常)

  当支持类无法找到预期的 Web 元素时,会发生此 Selenium 异常。

  32. UnknownMethodException( 未知方法异常)

  这是常见的 Selenium 异常之一,当请求的命令能够匹配已知 URL 但无法匹配该 URL 的方法时就会发生。要处理此异常,应检查与 URL 一起传递的方法是否有效。

  33. WebDriverException

  这是由于 Selenium WebDriver 和目标 Web 浏览器的绑定不兼容而发生的基本 WebDriver 异常。要处理此异常,应该下载与相应 Web 浏览器兼容的 Selenium WebDriver 库。

  四、Java中的Selenium异常

  有些Selenium异常是特定编程语言的测试自动化所特有的。除了上面介绍的 Selenium 中的常见异常外,下面介绍 Java 语言特有的 Selenium 异常:

  34. ConnectionClosedException(连接关闭异常)

  当与 Selenium WebDriver 的连接丢失时抛出此异常。

  35. ErrorHandler.UnknownServerException

  当服务器返回错误而没有堆栈跟踪时,它用作占位符。

  36. JsonException

  当你能获取会话功能,但却没有创建会话时会抛出此异常。

  37. NoSuchSessionException

  在 WebDriver.quit() 执行后调用命令时会抛出此 Selenium 异常。由于 WebDriver 实例已不存在,对该特定 WebDriver 实例的任何操作都会返回此异常。

  38. NotFoundException

  当DOM上不存在元素时会发生此异常。

  39. ScriptTimeoutException

  当异步脚本的执行没有在给定的时间限制内完成时抛出。

  40. UnhandledAlertException(未处理警报异常)

  Selenium 异常是 WebDriver 异常的子类。当 WebDriver 无法执行警报操作(即使存在警报)时,就会抛出该异常。

  41. UnreachableBrowserException(无法访问浏览器异常)

  UnreachableBrowserException 表示与自动化测试代码控制的 Web 浏览器通信时出现问题。这也可能是由于与 Selenium 服务器通信的问题造成的。

  如果远程 Selenium WebDriver 或 Selenium 网格的服务器地址无效,则可能会发生这种情况。浏览器实例也有可能在 Selenium 测试自动化周期中终止。

  42. UnsupportedCommandException(不支持的异常命令)

  当远程 Selenium WebDriver 发送的命令无效时抛出此异常。

  43. NoSuchContextException

  该异常发生在移动测试中,由 ContextAware.context(String) 抛出。

  44. NotConnectedException

  当在规定的时间段内尝试连接后尝试连接特定主机或远程 Selenium 网格失败时,将引发此 Selenium 异常。

  45. SeleniumException

  顾名思义,当 Selenium 命令失败时会抛出 Selenium 异常。

  46. UnableToCreateProfileException(无法创建配置文件异常)

  当要执行 Selenium 测试自动化的浏览器使用某些自定义配置文件打开但 WebDriver 或浏览器在支持该配置文件时出现问题时,会发生 UnableToCreateProfileException。

  要处理此异常,建议检查已安装的 Selenium WebDriver 版本以及 Web 浏览器支持的配置文件。

  47. UrlChecker.TimeoutException

  当浏览器在尝试一段时间后无法打开被测 URL 时,会抛出此异常。

  要处理此 Selenium 异常,在尝试在浏览器中打开(正在测试中)之前,必须检查 URL 的正确性。

  五、C#中的Selenium异常

  C# 特有的Selenium异常有:

  48. DriverServiceNotFoundException(驱动程序服务未找到异常)

  当执行自动浏览器测试的元素不可见时,将引发 DriverServiceNotFoundException 类下的异常。

  要处理此异常,可以等待页面完全加载,在确认 Web 元素可见后再执行 Selenium WebDriver 命令。

  49. WebDriverTimeoutException

  WebDriverTimeoutException 类表示执行操作时发生错误时引发的异常。

  50. XPathLookupException

  当XPath查找过程中发生错误时抛出的Selenium异常。

  六、处理Selenium异常

  处理 Selenium 异常的方式因编程语言而异。不过,最重要的一点是,Selenium异常应该被处理,因为异常提供了极其重要的信息。

  以下是常用编程语言处理 Selenium 异常的简要要点:

  Python:如果你使用Python进行浏览器自动测试,异常类可在selenium.common.exception中找到,在使用该包的任何命令之前都应导入。

  异常使用 try...except 块来处理,其中 try 块可让你测试代码是否出错,except 块可帮助你处理错误,而可选的 finally 块无论 try 块是否引发错误都会被执行。

  Java :Selenium 异常在 Java 中使用 try-catch 方法处理。try 代码块是代码块的开始,catch 代码块包含解决异常的执行。catch 块位于 try 块的末尾。

  与 Python 一样,您也可以使用 finally 关键字创建一个代码块,无论异常是否发生,该代码块都会被执行。

  C# :与 Java 类似,Selenium 也使用 try-catch 语句处理异常。try 块包含可能导致异常的代码。try 块下的代码会被执行,直到代码成功执行或异常抛出。catch 块包含不同异常的处理程序。

  总而言之

  异常在开发中很常见,但必须小心处理。了解不同的 Selenium 异常非常重要,因为这有助于开发更强大的自动化浏览器测试脚本。

  Selenium 测试自动化中的异常处理有助于识别特定于浏览器/平台/设备的跨浏览器兼容性问题。

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

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

 

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

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

相关文章

台积电2纳米黑科技 - 晶背供电 | 百能云芯

近期,台积电总裁魏哲家在一次法说会中透露了有关2纳米芯片的最新进展,并提到了“晶背供电”技术,这个领域的神秘黑科技正逐渐引起人们的兴趣。 在最近的台积电法说会上,总裁魏哲家不仅提到了2纳米制程的进展,还透露&am…

关于接口|常见电商API接口种类|接口数据类型|接口请求方法

常见接口种类# Http/Https接口: 通过http/https协议传送接口数据(通常按字符串/二进制传输), 如常见的网页表单, https安全性更好 RESTful Api: REST表述性状态传递. 一种设计风格,基于http/https协议, 把一切接口视为资源, 接口要分版本,在统一的域名下管理, 不同的方法(get…

MySQL索引揭秘,详解索引概念与作用,让你的数据库查询快如闪电

简介:MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计就像汉语字典的目录页,可以按拼音、笔画、偏旁部首等排序的目录快速查找到需要的字。数据库索引用于快速找出在数据…

若依进行tab页面切换时要求不刷新页面 vue3

若依进行tab页面切换时要求不刷新页面 vue3 看看个人中心怎么实现的 然后vue文件是这样的,注意大小写咯

C语言数据结构之数据结构入门

目录 数据结构介绍 数据结构发展史 何为算法 数据结构基础 基本概念和术语 四大逻辑结构(Logic Structure) 数据类型 理解复杂度概念 时间空间复杂度定义 度量时间复杂度的方法 程序运行时的内存与地址 编程预备 数据结构介绍 数据结构发展…

新框架Nue.js以及如何搭建框架(详细介绍)

先把官方文档已经github放在这里 链接: Nue官方文档👈点击即可跳转 链接: Nue官方github👈点击即可跳转 入门 NueJS是一个非常小(2.3kb minzipped)的JavaScript库,用于构建用户界面。它是Nue工具集的核心。它就像Vue.j…

工业级PoE交换机的工作原理

工业级POE交换机非常普遍,在许多供电不便的项目中被广泛使用,主要用于数据传输通信。大多数工业级POE交换机都是非网管型的,即插即用,配置简单,非常方便!然而,您了解它的工作原理吗?…

电机控制运放选型基本知识

概述 电机控制中一般使用运放搭配检流电阻实现电流采样。以下几个运放参数作为基本的考量对象。 共模电压和差模电压 共模电压 这个参数表示运放正负输入端分别对地的电压的平均值,即运放两端输入电压的中点电位,超过规格书限制的共模输入电压将损坏运…

Linux系统下的文件系统、各文件系统下目录结构及作用

要利用任何Linux系统,你需要对Linux的文件和目录(也称文件夹)了解。 Linux shell命令行中,文件和目录不是直观看见。需要使用:cd、ls、pwd等shell命令在目录之间切换。 Linux文件被收集到目录中,目录形成一个层级或树状结构: 一个目录可能包含其他目录,这些目录被称为子…

2023年下半年WSK-PETS5考试内容大纲及题型解析

国家公派留学人员全国外语水平考试(WSK-PETS5)成绩作为国家留学基金委(CSC)认可语言成绩证明,一直备受公派访问学者、博士后申请者的关注。随着下半年考试时间的临近,知识人网小编特整理出本次考试内容大纲…

小程序request请求封装

以上为本人的项目目录 1.首先在utils中创建request.js文件封装request请求,此封装带上了token,每次请求都会自带token,需要你从后端获取后利用wx.setStorageSync(token,返回的token),不使用的话就是空。 直接复制即可,需要改一下…

Forrester Wave报告:百度智能云15项能力第一,获评中国人工智能/机器学习平台领导者 入选Forrester领导者象限

Forrester Wave报告:百度智能云15项能力第一,获评中国人工智能/机器学习平台领导者 入选Forrester领导者象限! 日前,国际权威咨询机构Forrester发布了最新的《The Forrester Wave™:中国市场人工智能/机器学习平台厂商…

了解单域名证书和通配符证书的区别,选择合适的SSL证书解决方案

随着互联网的不断发展,网站安全性问题一直备受关注,在保护网站数据安全的过程中,SSL证书一直发挥着至关重要的作用。而在选择SSL证书时,单域名证书和通配符证书是两种常见的选择。本文将详细介绍单域名证书和通配符证书的区别&…

Eigen库的学习使用

环境准备 在虚拟机上安装Eigen sudo apt-get install libeigen3-dev 下载好视觉SLAM十四讲对应的代码后,下载KDevelop,KDevelop位于Ubuntu系统的软件仓库,可以使用apt-get来安装。 1.打开project,选择对应目录下的CMakeLists.tx…

接口测试--Postman变量

Postman是我们做接口测试的常用工具之一,然而对于刚接触Postman的小伙伴们来说,往往对这款工具支持的各类变量感到迷茫,傻傻分不清这些不同级别的变量都有哪些区别、分别适用于哪些场景。 本次分享将对Postman各类变量的创建,执行…

门店私域流量系统:打开营销新世界的大门

当前,门店私域流量系统已经成为了企业营销的重要利器。通过建立属于自己的私域流量平台,可以让门店更好地了解客户需求,提高营销效果,实现精细化营销闭环。门店私域流量系统有哪些重点功能? 1. 用户画像:通…

【黑产攻防道03】利用JS参数更新检测黑产的协议破解

任何业务在运营一段时间之后都会面临黑产大量的破解。验证码和各种爬虫的关系就像猫和老鼠一样, 会永远持续地进行博弈。极验根据十一年和黑产博弈对抗的经验,将黑产的破解方式分为三类: 1.通过识别出验证码图片答案实现批量破解验证,即图片…

浏览器下载视频插件使用

AIX智能下载器(图片/视频/音乐/文档) - Microsoft Edge Addons软件介绍: AIX智能下载器可高效实现下载管理,网页图片,视频,音频等内容的嗅探和下载,同时扩展集成多个网站的智能脚本,快速提取你想要的内容。…

【zip密码】7-zip分卷压缩方法

想要压缩的文件过大,想要在压缩过程中将文件拆分为几个压缩包并且同时为所有压缩包设置加密应该如何设置? 想要分卷压缩文件并加密一起操作就可以完成了,设置方法如下: 打开7-zip,选中需要压缩的文件,选择…

基于Java的财务管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…