随机Selenium E2e测试由于Azure DevOps上的超时而失败,但在本地和远程Selenium(BrowserStack Automate)工作

Joh*_*ell 8 c# selenium selenium-webdriver azure-devops webdriverwait

我有一套Selenium测试,在我的本地环境中完美运行并使用Browserstack Automate,但在Azure DevOps上失败.

在Azure Devops上运行时,没有任何配置或设置更改.

我们已经按照这里的所有文档:https://docs.microsoft.com/en-us/azure/devops/pipelines/test/continuous-test-selenium?view=vsts

随机测试失败,从不相同.

由于超时,测试总是失败.我等待页面加载5分钟,所以不是超时的情况太低.

没有防火墙,应用程序是公开的.

身份验证始终成功,因此测试可以加载应用程序.

不知道下一步该尝试什么.

以下是Azure DevOps日志的副本.4个测试通过,但所有其他测试都失败了.通常,只有4-5次测试失败.

此测试使用BrowserStack Automate(远程selenium)和本地完美运行.

2018-11-17T05:40:28.6300135Z  Failed   StripeAdmin_WhenOnTab_DefaultSortIsByIdDescending
2018-11-17T05:40:28.6300461Z Error Message:
2018-11-17T05:40:28.6304198Z  Test method CS.Portal.E2e.Tests.Admin.StripeAdmin.StripeAdminTests.StripeAdmin_WhenOnTab_DefaultSortIsByIdDescending threw exception: 
2018-11-17T05:40:28.6305677Z OpenQA.Selenium.WebDriverTimeoutException: Timed out after 300 seconds
2018-11-17T05:40:28.6307041Z Stack Trace:
2018-11-17T05:40:28.6307166Z     at OpenQA.Selenium.Support.UI.DefaultWait`1.ThrowTimeoutException(String exceptionMessage, Exception lastException)
2018-11-17T05:40:28.6307999Z    at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
2018-11-17T05:40:28.6308188Z    at CS.Portal.E2e.Tests.Utility.WebDriverUtilities.WaitForElement(IWebDriver driver, By by, Boolean mustBeDisplayed) in D:\a\1\s\CS.Portal.E2e.Tests\Utility\WebDriverUtilities.cs:line 26
2018-11-17T05:40:28.6319651Z    at CS.Portal.E2e.Tests.Admin.StripeAdmin.StripeAdminTests.StripeAdmin_WhenOnTab_DefaultSortIsByIdDescending() in D:\a\1\s\CS.Portal.E2e.Tests\Admin\StripeAdmin\StripeAdminTests.cs:line 51
2018-11-17T05:40:28.6319982Z 
2018-11-17T05:40:34.4671568Z Results File: D:\a\1\s\TestResults\VssAdministrator_factoryvm-az416_2018-11-17_03_08_24.trx
2018-11-17T05:40:34.4692222Z 
2018-11-17T05:40:34.4695222Z Attachments:
2018-11-17T05:40:34.4697610Z   D:\a\1\s\TestResults\672f4d28-5082-42e9-a7e7-f5645aadcfd8\VssAdministrator_factoryvm-az416 2018-11-17 03_02_43.coverage
2018-11-17T05:40:34.4697943Z 
2018-11-17T05:40:34.4698278Z Total tests: 34. Passed: 4. Failed: 30. Skipped: 0.
Run Code Online (Sandbox Code Playgroud)

Deb*_*anB 6

代码段中的几行内容将有助于更好地分析问题。

但是,由于您的测试总是会因超时而失败,因此值得一提的是,通常TimeoutExceptionExpectedConditions 失败 的结果。但是,也可能存在其他问题。

避免这些问题的一些方法如下:

警告:请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。

  • 您可以在如何确定是否为Selenium加载了一些HTML元素中找到了详细的讨论。

  • 如果您使用的是ChromeDriverChrome浏览器,则必须确保以下二进制文件兼容:

    • ChromeDriver v2.44:支持Chrome v69-71(与ChromeDriver 2.43相同,但具有其他错误修复,于2018年11月20日发布)
    • ChromeDriver v2.43:支持Chrome v69-71
    • ChromeDriver v2.42:支持Chrome v68-70
    • ChromeDriver v2.41:支持Chrome v67-69
  • 不同的浏览器以不同的方式呈现HTML DOM。因此,您需要确保所使用的定位器策略已优化。
  • 根据当前的WebDriver-W3C建议,以下是首选的定位器策略列表:

定位器策略_W3C

  • 使用CssSelectorXPath性能有所不同。一些要点:
    • 对于初学者来说,XPath和CSS之间的性能没有显着差异。
    • 在IE8等较旧的浏览器中遍历DOM不适用于CSS,但可以与XPath一起使用。XPath可以遍历DOM(例如从子级到父级),而CSS只能遍历DOM(例如从父级到子级)。但是,无法在旧版浏览器中使用CSS遍历DOM不一定是一件坏事,因为它更多地表明您的页面设计不良,并且可以从有用的标记中受益。
    • 支持CSS的一个论点是,它们是主观的,它们更具可读性,简洁性和简洁性。
    • Ben Burton提到您应该使用CSS,因为这是构建应用程序的方式。这使测试更易于编写,讨论和帮助其他人维护。
    • Adam Goucher表示将采用一种更加混合的方法-首先关注ID,然后关注CSS,并仅在需要时使用XPath(例如,走在DOM上),并且XPath对于高级定位器将始终更加强大。
    • 您可以在为什么我应该使用CSS选择器而不是XPath进行自动测试中找到详细的讨论

结论

考虑到上述因素,您需要与上述其他方法一起明智地实施“ 定位器策略”,这将帮助您摆脱超时问题

  • 我感谢您为这个答案付出的努力,但这没有帮助。测试在本地运行良好,并在浏览器堆栈上与远程 Selenium 一起运行。测试仅在 Azure Dev Ops 环境中失败。代码已经在使用 WebDriverWaits,这应该可以通过日志第 6 行和第 7 行的堆栈跟踪显而易见,但感谢您的努力。 (2认同)

Vla*_*mov 0

以下是我要做的一些步骤:

  1. 在类似的情况下,对我们有帮助的是临时添加一个录像机到测试中,然后在虚拟机上观察从开始到失败的测试执行过程。视频上可能有一些线索可以帮助您了解实际出了什么问题,我可以找到 C# 示例的链接

  2. 另外,我会仔细检查以确保 Azure 上的浏览​​器版本与运行中的浏览器版本完全相同,一切正常。使它们相同对于确保不存在“魔法”至关重要。默认浏览器窗口大小相同。

  3. 我会对不同测试失败的地方进行更详细的分析。

    • 是否有可能发现不同测试失败之间的相似之处?点击后总是发生这种情况吗?重新加载页面后?在还有其他类似的事情之后吗?如果是 - 尝试使用最奇怪但简单且有时可以挽救生命的解决方案,并在失败之​​前的操作之前/之后添加 3-5 秒的睡眠。(添加睡眠条件,使其仅在 Azzure 运行时发生)(是的,不建议睡眠并且{很多众所周知的信息为什么不推荐它们可能已经在这里}但是......如果他们神奇地保存了你的运行,然后您可以肯定用一些智能等待替换它们)
    • 故障是否有可能在某个特定时间发生?运行开始后的同一时间后?白天的同一时间?
  4. 如果您在代码中使用日期/时间 API,请确保系统时间/区域设置/时区设置完全相同。或者在测试运行期间日子不会改变。总而言之 - 围绕日期进行调查。

我知道上述内容更像是一般性建议,但根据我的经验,这种“随机故障”可能是由任何看似“不值得关注”的事情引起的。