Selenium 自动化:在运行测试套件时,除了有效失败之外,可接受的失败测试用例范围应该是多少?

     2023-02-26     281

关键词:

【中文标题】Selenium 自动化:在运行测试套件时,除了有效失败之外,可接受的失败测试用例范围应该是多少?【英文标题】:Selenium Automation: What should be the acceptable range of failed test cases apart from the valid fails when running a test suite? 【发布时间】:2019-06-03 19:52:54 【问题描述】:

我们公司正在为 Web 应用程序开发一个包含 Selenium、POM、Maven 和 Java 的框架,我们有大约 35 个测试用例。当我们运行 testng.xml 时,至少有 4 到 5 个测试用例由于过时元素异常或此时不可点击的元素等原因随机失败。

当我们运行 testng.xml 时,某些测试用例是否会失败?您的组织中运行了多少测试用例,失败的估计数是多少?

【问题讨论】:

如果测试失败,则意味着您的测试代码不能按照您的预期工作,或者您的测试很糟糕。根本不应该有失败的测试 【参考方案1】:

您只需要在 driver.findElement() 之前添加一些等待。 Selenium 工作得非常快,这就是为什么你会得到这个过时的元素或元素不可见的异常。添加等待应该可以解决问题。

【讨论】:

【参考方案2】:

测试自动化与测试的可重复性和执行测试的速度有关。有许多商业和开源工具可用于协助开发测试自动化Selenium可能是其中使用最广泛的开源解决方案。

可接受的失败测试范围

此矩阵可能因组织而异或根据特定的客户要求而有所不同。但是Exit Criteria 必须持有此限制的密钥。话虽如此,由于 自动化测试Selenium 自动化了 回归测试,所以理想情况下应该有 失败。我认识一些遵守Zero Defect 政策的组织。

您面临的错误

StaleElementReferenceException:表示对元素的引用现在“过时” --- 该元素不再出现在页面的 DOM 上。 您可以在以下位置找到有关 StaleElementReferenceException 的详细讨论: StaleElementReference Exception in PageFactory Selenium assertFalse fails with staleelementreferenceexception Selenium Webdriver - Stale element exception when clicking on multiple dropdowns. DOM dint change ElementClickInterceptedException:表示由于目标元素以某种方式被遮挡,导致点击无法正确执行。 您可以在以下位置找到有关 ElementClickInterceptedException 的详细讨论: Selenium Web Driver & Java. Element is not clickable at point (x, y). Other element would receive the click Selenium WebDriver throws Exception in thread “main” org.openqa.selenium.ElementNotInteractableException Selenium : How to solve org.openqa.selenium.InvalidElementStateException: invalid element state

结论

所以你提到的错误不是错误,而是可能在测试执行时出现,原因如下:

您使用的二进制文件版本之间的兼容性不匹配。 WebDriver 实例和 Web Browser 实例之间的同步不匹配。

可以按照上述最佳做法轻松解决这些错误。

【讨论】:

【参考方案3】:

由于过时的元素、某个点不可点击的元素、时间问题等导致的失败。必须在您的自动化框架中处理和处理 - 您正在创建和使用的方法来构建案例。 它们不应传播并导致案例失败——它们是技术问题,而不是产品问题或测试用例问题。因此,必须及时考虑(例如尝试/捕获块)和处理(重试机制或重新获取 Web 元素)。

本质上 - 像对待语法错误一样对待这些类型的失败 - 不应该有这样的


同时——根据我的经验——处理实时/动态数据的案例有时可能会随机失败。

例如,我正在处理的 SUT 会根据我无法控制的数据和操作(来自上游系统的生命流量)显示一些指标和聚合。有些情况下会根据设定的预期检查特定生成的工件的行为(例如,想象一张月图,它根本没有很多数据点 - 那些日子没有任何活动) - 它的案例会失败,不是因为它们构造不正确,当然也不是因为存在产品错误 - 而是因为执行时间和数据集的结合。

随着时间的推移,我得出的结论是,这些故障是可以的,让它们“修复”——重新选择数据集、解决此类外部波动等是一项价值递减和投资回报率可疑的活动。在该系统的当前约 10,000 个案例中,大约 1.5% 的案例因此失败(免责声明:SUT 专门处理实时/生产数据)。 这几乎不是一个经验法则——这只是我确定的一个数字,考虑到上下文是可以接受的。

还有重要的一点——如果我完全控制了这些数据,我就会摆脱那些“随机”失败。我故意选择使用真实数据——因此我的案例也验证了它的完整性;有这种负面影响。

【讨论】:

感谢 Todor,将在我的框架中消除这些错误【参考方案4】:

过时元素异常 - 当元素不再在 DOM 中时,会出现此异常。造成此问题的主要因素是在查找元素时页面被加载。处理此问题的最佳方法是捕获异常。如前所述,它应该被设计为框架的一部分来处理这些情况

元素在点不可点击 - 发生此问题的原因有几个

    页面仍在加载中 在我们要点击的元素顶部有一个覆盖层,从而阻碍了它

最佳方法 解决测试中不稳定的最佳方法是在失败的情况下捕获屏幕截图并对其进行处理。应该设计一个测试框架来处理所有这些极端情况

【讨论】:

【参考方案5】:

谢谢大家,我可以解决这个问题

遵循的步骤 1) 过期元素异常: 场景:根据搜索条件,目录将加载编辑和删除按钮。 搜索速度很慢,编辑按钮的元素会过时 解决方案:使用早期帖子中的自定义等待示例代码并暂停它的工作

public static void customewait(int seconds)
            Date start = new Date();
             Date end = new Date();
             while(end.getTime() - start.getTime() < seconds * 1000)
                 end = new Date();
             
    

之前在下面的代码中使用过,但是没有用

public void getVisibilityAllTableAddressBook() 

        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.visibilityOfAllElements(driver.findElements(By.cssSelector("#data-table-items"))));


【讨论】:

如何在 AWS lambda 中部署 selenium 测试套件

】如何在AWSlambda中部署selenium测试套件【英文标题】:HowtodeployseleniumtestsuiteinAWSlambda【发布时间】:2020-01-1407:27:20【问题描述】:我有一个用于UI测试的测试套件。我可以在本地机器上运行相同的套件并且运行良好,但我想将相... 查看详情

Selenium GRID:并行运行多个 Robot Framework 测试套件

】SeleniumGRID:并行运行多个RobotFramework测试套件【英文标题】:SeleniumGRID:runmultipleRobotFrameworktestsuitesinparallel【发布时间】:2016-07-2001:41:20【问题描述】:我有三个测试套件和三个节点机器。如何在两台不同的机器上并行运行每个... 查看详情

如何让 Jenkins 在部署时自动运行 Selenium WebDriver/TestNG/Java 测试,Maven 与这一切有啥关系?

】如何让Jenkins在部署时自动运行SeleniumWebDriver/TestNG/Java测试,Maven与这一切有啥关系?【英文标题】:HowtomakeJenkinsrunSeleniumWebDriver/TestNG/JavatestsautomaticallyondeployandwhathasMaventodowithallthis?如何让Jenkins在部署时自动运行SeleniumWebDriver/Tes... 查看详情

TestNG 可以运行多个套件吗?

...【发布时间】:2011-05-2822:10:04【问题描述】:我正在使用Selenium和TestNG测试web-ui。我有一个包含许多测试类的测试套件。我有一个@BeforeSuite方法,它也有一个@Parameters注释,该方法接收将运行Selenium测试的浏览器作为参数,执行以... 查看详情

如何在同一台机器上运行多个硒测试套件

...】:我正在使用Java/Seleniumwebdriver和testng来运行我的测试自动化,我有很多自动化项目,每个项目都使用一个测试套件.xml,我如何在同一台机器上同时运行两个或更多套件,这是我创建driverI 查看详情

在测试套件中运行测试用例文件后如何避免浏览器关闭?

...间】:2019-01-2805:54:04【问题描述】:我正在使用Squish工具自动化Web应用程序。在套件中,我有两个测试用例文件。但是当我将它作为套件运行时,浏览器将关闭并为下一个测试用例重新启动它。deflaunchAxisAp 查看详情

如何在 AWS 上运行带有自动回归测试套件的分析器

】如何在AWS上运行带有自动回归测试套件的分析器【英文标题】:HowtorunaprofilerwithautomatedregressiontestsuitonAWS【发布时间】:2018-06-0716:44:21【问题描述】:我已经开始了一个新项目,并使用空手道编写了一些回归测试(将添加更多... 查看详情

尝试与 Bamboo 一起运行时,Selenium 测试挂起

...尝试使用Bamboo的构建和部署功能在我的项目中运行Selenium自动化测试。我们目前正在使用Maven任务来构建和运行常规JUNIT测试,并且计划在代码成功部署到服务器后使用另一个Maven任务来运行 查看详情

Selenium 不启用按钮

】Selenium不启用按钮【英文标题】:Seleniumdoesnotenableabutton【发布时间】:2012-02-2817:50:37【问题描述】:我只是在我的应用程序的UI测试中玩了一下,碰巧发现了一个问题。登录屏幕有用户ID和密码字段,如果两个字段中都有一些... 查看详情

带你学懂(代码片段)

问题当我们描述一个“好的自动化测试用例”时,经常出现标准是:精确自动化测试用例应该测试一件事,只有一件事。与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败独立自动化测试用例不应... 查看详情

错误 [严重]:从渲染器接收消息超时:20.000 在 Jenkins 上通过 Selenium 执行测试套件时

...错误[严重]:从渲染器接收消息超时:20.000在Jenkins上通过Selenium执行测试套件时【英文标题】:Error[SEVERE]:Timedoutreceivingmessagefromrenderer:20.000whileexecutingthetestsuitethroughSeleniumonJenkins【发布时间】:2018-10-0715:11:45【问题描述】:我使... 查看详情

我应该在每次基于selenium的自动化测试后退出浏览器吗?(代码片段)

我试图让我的selenium测试尽可能原子化并且彼此独立,所以我决定退出浏览器并在每次测试运行后创建一个新的Webdriver实例。这种方法对我来说更有意义,并且通过讨论这个问题的几个主题得到了加强。即G。Thisanswertoarelatedquestio... 查看详情

使用 JAVA 在 selenium 中执行测试的屏幕记录

...2015-06-0713:38:40【问题描述】:我使用javaselenium创建了一个自动化程序。我使用了TestNG框架。我想记录在脚本执行期间正在执行的屏幕(视频),因此最好跟踪失败/通过的场景并查看执行过程。谁能帮我解决这个问题,如何在运... 查看详情

运行测试套件时测试容器初始化错误

】运行测试套件时测试容器初始化错误【英文标题】:testcontainerinitializationErrorwhilerunningatestsuite【发布时间】:2021-05-2108:31:09【问题描述】:我有多个测试类使用testcontainer运行相同的docker-compose。该套件以initializationError失败,... 查看详情

使用 Haskell Stack 运行详细的 0.9 测试套件时“无法在本地找到模块”

】使用HaskellStack运行详细的0.9测试套件时“无法在本地找到模块”【英文标题】:"modulecannotbefoundlocally"whenrunningdetailed-0.9testsuitewithHaskellStack【发布时间】:2019-02-2212:48:39【问题描述】:我有一个使用detailed-0.9的带有测试... 查看详情

selenium-简介

...么?回到顶部Selenium是最广泛使用的开源WebUI(用户界面)自动化测试套件之一。它最初由杰森·哈金斯(JasonHuggins)于2004年开发,作为ThoughtWorks的内部工具。Selenium支持跨不同浏览器,平台和编程语言的自动化。Selenium可以轻... 查看详情

在远程 teamcity 构建代理上运行 selenium 自动化测试

】在远程teamcity构建代理上运行selenium自动化测试【英文标题】:Runningseleniumautomationtestsonremoteteamcitybuildagent【发布时间】:2014-01-0601:28:32【问题描述】:最近我们开始使用Teamcity进行构建管理并使用ANT脚本运行seleniumjunit测试。测... 查看详情

默认情况下在phpunit中运行单个测试套件(代码片段)

我的PHPUnit配置文件有两个测试套件,unit和system。当我运行测试运行器vendor/bin/phpunit时,它会在两个套件中运行所有测试。我可以使用testsuite标记来定位单个套件:vendor/bin/phpunit--testsuiteunit,但我需要配置测试运行器默认情况下... 查看详情