49自动化测试中最常见的硒异常

开发人员将始终在编写代码时牢记不同的场景,但是在某些情况下,实现可能无法按预期工作。 相同的原则也适用于测试代码,该代码主要用于测试现有产品的功能,发现错误以及使产品100%不受错误影响。

正确地说,真理总是比小说更陌生,当您执行Selenium测试自动化时,您会目睹很多“陌生的事物”。 在执行测试代码时遇到的这些事情或场景可能不是很常见,但是测试实现应该足够健壮以应对此类场景。 这些场景被恰当地称为例外,在使用Selenium进行自动浏览器测试时,您会遇到许多此类例外。

Selenium异常被广泛用于处理错误情况并避免Web应用程序故障。 尽管在所有Selenium WebDriver代码中都可能发生许多Selenium异常,但是某些Selenium异常特定于框架支持的编程语言,例如Java,C#,Python等。此博客介绍了常见的Selenium异常以及特定于语言的异常,一个详尽的列表,在代码中遇到异常时可能会有所帮助。

在本博客的最后,您将获得有关执行自动浏览器测试相关方案时经常使用的Selenium异常的完整介绍。

硒异常简介

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

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

正确处理异常是一个好习惯,因为未处理的异常会导致程序失败,从而最终影响产品体验。 异常对象包含有关异常类型,调用堆栈的信息以及其他有用的信息,这些信息将有助于调试并使代码更加安全。

硒自动化的11种最佳单元测试框架

硒异常类别

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

A.检查异常

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

如果某些方法引发了检查的异常,则最好定义一个处理该特定异常的处理程序。

B.未检查的异常

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

Java中的异常可以选中或取消选中,而C ++中的所有异常都选中。 在自动浏览器测试相关方案中,经常会遇到未经检查的异常,因为这些测试涉及Web浏览器和操作系统的不同组合和版本。

另请阅读: 使用Selenium WebDriver测试自动化的22条实用技巧

硒例外备忘单

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

常见的硒异常

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

  1. ElementClickInterceptedException

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

  1. ElementNotInteractableException

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

  1. ElementNotSelectableException

当目标元素存在于DOM上但由于无法选择而无法与之交互时,就会发生此Selenium异常。 例如,与脚本元素进行交互时将抛出此异常。

  1. ElementNotVisibleException

Selenium异常的最常见类型,即使存在web元素但不可见,也将引发该异常。 由于该元素不可见,因此无法与该元素进行任何交互。

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

  1. ErrorInResponseException

当服务器端发生某些问题或错误时,将抛出此Selenium异常。 如果用户名和访问密钥的错误组合用于访问基于云的远程Selenium Grid,与远程Web驱动程序服务器进行通信或与Firefox扩展(或Chrome附加组件)进行通信,则可能会发生这种情况。
服务器端错误的一些常见响应代码是:

    • 401 –未经授权
    • 400 – BadRequest
    • 500内部服务器错误
    • 409 –冲突
    • 403 –禁止
    • 405 – MethodNotAllowed

如果IME(输入法引擎)的激活由于某种原因失败,则抛出此异常。
解决此问题的理想方法是检查计算机上是否有IME支持。

  1. ImeNotAvailableException

如果IME(输入法引擎)不可用,则抛出此Selenium异常。 如果在测试计算机上没有IME支持,则会为每个与IME相关的方法引发ImeNotAvailableException。

  1. InsecureCertificateException

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

  1. NoSuchFrameException

当要切换到的帧不存在时,将引发NoSuchFrameException Selenium异常。

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

  1. NoSuchWindowException

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

  1. RemoteDriverServerException

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

  1. ScreenshotException

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

  1. SessionNotCreatedException

当新会话的创建不成功时,将发生此异常。

  1. InvalidArgumentException

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

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

  1. InvalidCookieDomainException

当尝试添加Cookie的URL /域与当前URL不同时,将抛出此Selenium异常。
要处理此异常,您应该导航到必须在其中添加Cookie的正确URL。

  1. InvalidCoordinatesException

向交互操作提供不正确的坐标时,将引发此特定异常。

这也意味着依赖于鼠标位置(例如单击)的动作之前没有进行移动操作,或者为移动操作提供了无效的坐标。

  1. InvalidElementStateException

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

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

  1. InvalidSelectorException

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

当XPath表达式是选择器并且XPath无效时,通常会发生这种情况。 这导致无法找到所需的Web元素。

  1. InvalidSessionIdException

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

  1. InvalidSwitchToTargetException

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

  1. JavascriptException

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

  1. NoAlertPresentException

当切换到屏幕上尚不存在的警报时,会发生这种情况。 处理警报的理想方法是检查警报是否存在,然后在Alert()类上调用所需的操作。

  1. MoveTargetOutOfBoundsException

如果提供给ActionChains()move方法的目标超出范围(即无效或超出文档/网页),则抛出Selenium异常。

在调用ActionChains()类的move方法之前,应始终检查我们尝试移动的位置,并仅在屏幕上存在该位置时才执行该操作。

  1. NoSuchAttributeException

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

要处理此异常,应为执行测试的浏览器检查属性的存在。 同一属性的不同属性名称可能因浏览器而异,处理效率低下可能导致此异常。

避免发生此异常的另一种方法是通过基于DOM上元素的新详细信息来更改属性。

  1. NoSuchCookieException

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

  1. NoSuchElementException

当用于访问元素的定位器无效或试图对不在DOM上的元素执行操作时,将引发NoSuchElementException。 在这两种情况下,都不会找到该元素。

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

  1. StaleElementReferenceException

当对元素的引用不在页面的DOM上时,就会发生Selenium异常。 简而言之,该元素已腐烂或陈旧。
此特定Selenium异常的一些可能原因是:

    • 该元素可能位于刷新的iFrame内部。
    • 该页面可能已刷新,并且要访问的元素不再是当前页面的一部分。
    • 由于元素已定位,因此可以将其删除并重新添加到屏幕。

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

  1. TimeoutException

当当前正在执行的命令未在预期的时间范围内完成时,就会发生TimeoutException。

解决此异常的可能解决方案是增加命令完成执行的等待时间。 但是,应该为等待时间选择理想值,否则可能会延迟进一步执行。

  1. UnableToSetCookieException

在Selenium WebDriver无法设置cookie的情况下,会发生此Selenium异常。

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

  1. UnexpectedAlertPresentException

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

  1. UnexpectedTagNameException

如果支持类无法找到所需的Web元素,则会发生此Selenium异常。

  1. UnknownMethodException

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

  1. WebDriverException

这是由于Selenium WebDriver和目标Web浏览器的绑定不兼容而发生的基本WebDriver异常。

要处理此异常,您应该下载与相应的Web浏览器兼容的Selenium WebDriver库。

Java中的Selenium异常

一些Selenium异常特定于用于测试自动化的特定编程语言 。 除了上一节中介绍的Selenium中的常见异常外,以下是特定于Java语言的Selenium异常:

  1. ConnectionClosedException

与Selenium WebDriver的连接丢失时,将引发此异常。

  1. ErrorHandler.UnknownServerException

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

  1. JsonException

当您能够获得未创建会话的会话功能时,将引发此异常。

  1. NoSuchSessionException

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

  1. NotFoundException

当DOM上不存在任何元素时,将发生此异常。

  1. ScriptTimeoutException

当ASync脚本的执行未在给定的时间限制内完成时,将引发该错误。

  1. UnhandledAlertException

此Selenium异常是WebDriver异常的子类。 即使存在警报,WebDriver也无法执行警报操作时,将引发该事件。

  1. UnreachableBrowserException

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

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

  1. UnsupportedCommandException

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

  1. NoSuchContextException

此异常在移动测试中发生,并由ContextAware.context(String)引发

  1. NotConnectedException

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

  1. SeleniumException

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

  1. UnableToCreateProfileException

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

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

  1. UrlChecker.TimeoutException

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

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

C#中的硒异常

特定于C#的Selenium异常是:

  1. DriverServiceNotFoundException

当在其上执行自动浏览器测试的元素不可见时,将引发DriverServiceNotFoundException类下的异常。
要处理此异常,仅在确认Web元素的存在可见性之后,您可以等待页面完全加载并执行Selenium WebDriver命令。

  1. WebDriverTimeoutException

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

奖励积分,在这里我们给出一个韵母数

  1. XPathLookupException

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

常见JavaScript错误以及如何处理

处理硒异常

Selenium异常的处理方式因一种编程语言而异。 但是,最重要的是应该处理硒异常,因为该异常提供了非常关键的信息。

以下是在流行的编程语言中如何处理Selenium异常的简要要点:

Python –如果您使用Python进行自动浏览器测试 ,则selenium.common.exceptions中提供了异常类,应在使用该包中的任何命令之前将其导入。

异常是使用try ... except块进行处理的,其中try块使您能够测试代码是否存在错误,except块可以帮助您处理错误,并且无论try块是否引发错误,都将执行可选的finally块。

Java – Selenium异常是使用try-catch方法在Java中处理的。 try块是该块的开始,catch块包含解决异常的实现。 catch块放置在try块的末尾。
与Python一样,您也可以使用finally关键字创建一个代码块,无论是否发生异常,该代码块都会执行。

C# –与Java一样,Selenium异常使用try-catch语句处理。 try块包含可能导致异常的代码。 在成功执行代码或引发异常之前,将执行try块下的代码。 catch块包含不同异常的处理程序。

另请阅读: Selenium Automation中的常见挑战及其解决方法?

总而言之

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

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

您用于处理Selenium异常的机制有哪些,请在注释部分保留您的经验……

快乐测试

翻译自: https://www.javacodegeeks.com/2020/05/49-most-common-selenium-exceptions-for-automation-testing.html

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

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

相关文章

鹰式价差matlab,鹰式期权:什么叫铁鹰式期权组合,蝶式价差期权?

蝶式期权套利 是利用 交割月份的价差进行 套期获利, 个方向相 反、 共享居中交割月份合约的跨期套利组成。是一种期权策略,风险有限,盈利也有限,是由一手牛市套利和一手熊市套利组合而成的。铁鹰式期权组合是牛市看跌价差期权组合…

angular8 rest_带有Angular JS的Java EE 7 – CRUD,REST,验证–第2部分

angular8 rest这是Angular JS承诺的Java EE 7的后续版本–第1部分 。 花了比我预期更长的时间(找到时间来准备代码和博客文章),但是终于到了! 应用程序 第1部分中的原始应用程序只是带有分页的简单列表,以及提供列表数…

带有Java Pojo作为输入输出示例的AWS Lambda函数

在上一教程中,我们看到了如何使用Java创建AWS Lambda函数,并传递了String作为输入,还返回了String作为Output。如果您是第一次创建lambda函数,我建议先阅读该教程。 在本教程中,我们将看到如何传递Java普通的旧Java对…

php右侧弹窗QQ客服,JavaScript_网页右侧悬浮滚动在线qq客服代码示例,网页右侧悬浮滚动QQ在线客服 - phpStudy...

网页右侧悬浮滚动在线qq客服代码示例网页右侧悬浮滚动QQ在线客服代码function myEvent(obj,ev,fn){if (obj.attachEvent){obj.attachEvent(onev,fn);}else{obj.addEventListener(ev,fn,false);};};function getbyClass(id,sClass){var oParent document.getElementById(id);va…

idea spark java,IntelliJ Idea 搭建spark 开发环境

笔者介绍的是在MAC环境下使用Idea搭建spark环境。环境:spark 2.0.0scala 2.11.8maven 3.9.9idea 151.Idea的安装.Idea可以在官网上下载。熟悉java的肯定都知道这个开发利器,可以在官网上进行下载,在此就不在赘述。有免费的和付费版本,对于我们…

optaplanner_OptaPlanner –具有真实道路距离的车辆路线

optaplanner在现实世界中,车辆路径问题(VRP)中的车辆必须走这条路:它们不能在客户之间直线行驶。 大多数VRP研究论文和演示都乐于忽略此实现细节。 和我一样,过去。 尽管使用道路距离(而不是空中距离&#…

java中的jpa_JPA教程–在Java SE环境中设置JPA

java中的jpaJPA代表Java Persistence API,它基本上是一个规范,描述了一种将数据持久存储到持久存储(通常是数据库)中的方法。 我们可以将其视为类似于Hibernate之类的ORM工具的东西,除了它是Java EE规范的正式组成部分…

php中des加密cbc模式,php中加密解密DES类的简单使用方法示例

本文实例讲述了php中加密解密DES类的简单使用方法。分享给大家供大家参考,具体如下:在平时的开发工作中,我们经常会对关键字符进行加密,可能为了安全 也可能为了规范,所以要正确使用DES加密解密代码1:class DES{var $k…

java 并发线程_Java并发教程–线程之间的可见性

java 并发线程当在不同线程之间共享对象的状态时,除了原子性外,其他问题也会发挥作用。 其中之一是可见性。 关键事实是,如果没有同步,则不能保证指令按照它们在源代码中出现的顺序执行。 这不会影响单线程程序中的结果&#xff…

维持硒测试自动化的完美方法

毫无疑问, 自动浏览器测试已经改变了软件开发的工作方式。 如果不是Selenium,我们将无法像我们一样使用各种各样的无错误Web应用程序。 但是有时,甚至IT部门也误解了自动化一词。 大多数人认为计算机将为他们完成所有测试! 他们最…

双色球霸主网络问题_霸主–统治和管理API的地方

双色球霸主网络问题今天我们生活在一个越来越分散的世界中。 如今的计算机系统不再是在随机桌子下面的某些硬件上运行单个部门项目,而是大规模,集中甚至分散地运行。 监视和管理的需求从未改变,但是随着时间的推移变得越来越复杂。 如果将所有…

php验证码 php中文网,ThinkPHP 使用不同风格及中文的验证码

使用其他风格验证码在上文《ThinkPHP 验证码详解及实例》中了解了 ThinkPHP 验证码的具体用法,本文将进一步介绍如何使用不同风格的验证码以及使用中文验证码。上文例子使用的是默认参数,也就是生成 4 位的数字验证码。buildImageVerify 方法生成验证码时…

java 开发人员工具_Java开发人员应该知道的5种错误跟踪工具

java 开发人员工具随着Java生态系统的发展,可满足不断增长的请求和用户对高性能需求的Web应用程序成为了新型的现代开发工具。 具有快速新部署的快速节奏环境需要跟踪错误,并以传统方法无法维持的水平获得对应用程序行为的洞察力。 在本文中,…

Apache Camel 3.2 – Camel的无反射配置

在Apache Camel项目中,我们正在努力开发下一个即将发布的下一个Apache Camel 3.2.0版本。 我们在Camel 3中努力研究的问题之一就是使其变得更小,更快。 其中一个方面是配置管理。 您可以按照12要素原则以多种方式完全配置Camel,以使配置与应…

java jsoup解析_3使用Jsoup解析Java中HTML文件的示例

java jsoup解析HTML是Web的核心,无论您是通过JavaScript,JSP,PHP,ASP或任何其他Web技术动态生成的,您在Internet上看到的所有页面都是基于HTML的。 您的浏览器实际上是解析HTML并为您呈现它。 但是,如果需要…

【AI提示词艺术】第12期 摄影艺术构图处理和人像生成的技巧

摄影艺术构图 星空宇宙 关键词: 强烈的明暗对比,8k,精细的描述,相片纸,超高分辨率,无建筑的,大自然,星空,云朵,刺眼流星,群星,银河,仰视视角,广角镜头 以下是按照提示词类别整理的相关描述&a…

Kogito,ergo规则:从知识到服务,轻松自如

欢迎阅读有关Kogito倡议的博客系列的另一集,以及我们将Drools带入云的努力。 这些文章的目的是收集用户对我们提供给Kogito的功能的早期反馈。 在本文中,我们介绍了两种实现完整智能服务的新方法 : 独立的规则服务 集成智能工作流程和规则…

linux 读取内存颗粒,Linux虚拟内存地址转化成物理内存地址

背景现代手机这种SOC(system on chip),因为功耗、Modem等功能soc上集成了很多core,他们还可以是独立的系统在运转。比如ADSP简介ADSP(Application Digital Signal Processing)就是高通的Hexagon DSP ,就是独立运转的一个coresystem。这样做不仅可以使用soc上的专用核…

primefaces_PrimeFaces扩展中的全新JSF组件

primefacesPrimeFaces扩展团队很高兴宣布即将推出的3.0.0主要版本的几个新组件。 我们的新提交者Francesco Strazzullo为该项目提供了“ Turbo Boost”,并带来了至少6个已成功集成的 JSF组件! 当前的开发状态是OpenShift上的deployet – 请查看展示柜。以…

linux中memcpy实现分析,ARM64 的 memcpy 优化与实现

如何优化 memcpy 函数Linux 内核用到了许多方式来加强性能以及稳定性,本文探讨的 memcpy 的汇编实现方式就是其中的一种,memcpy 的性能是否强大,拷贝延迟是否足够低都直接影响着整个系统性能。通过对拷贝函数的理解可以加深对整个系统设计的一…