由于Azure DevOps超时,导致随机Selenium E2e测试失败,但在本地和远程Selenium上均可运行(BrowserStack Automate)

时间:2018-11-07 13:56:58

标签: 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(远程硒)和本地方法完美运行。

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.

2 个答案:

答案 0 :(得分:4)

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

但是,由于您的测试始终会由于超时而失败,因此值得一提的是,通常 TimeoutException 失败的结果{ {3}}。但是,还可能存在其他问题。

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

  

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

  • 您可以在WARNING

  • 中找到详细的讨论
  • 如果您使用的是 ChromeDriver Chrome浏览器,则必须确保二进制文件与以下条目兼容:

    • 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
  • 不同的浏览器呈现的How can I make sure if some HTML elements are loaded for Selenium不同。因此,您需要确保所使用的HTML DOM已优化。
  • 根据当前的Locator Strategies,以下是首选WebDriver-W3C Recommendation的列表:

Locator Strategies

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

结论

在考虑上述因素的同时,您需要明智地实施Why should I ever use CSS selectors as opposed to XPath for automated testing?以及上面讨论的其他方法,这些方法将帮助您摆脱超时

答案 1 :(得分:1)

这是我要执行的一些步骤:

  1. 在类似情况下对我们有帮助的是暂时将录像机添加到测试中,然后从头到尾观看VM上的测试执行过程。视频中可能有一些线索可以帮助您了解实际出了什么问题I was able to find this link for a C# example

  2. 此外,我还要仔细检查以确保Azure上的浏览器版本与运行良好的浏览器版本完全相同。使它们相同对于确保没有“魔术”至关重要。与默认浏览器窗口大小相同。

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

      可以发现不同测试失败之间的相似之处。点击后是否总是会发生?重新加载页面后?还有其他类似的东西吗?如果是,请尝试使用最怪异但又简单又有时可以挽救生命的解决方案,并在故障之前的操作之前/之后添加3-5秒的睡眠时间。 (添加有条件的睡眠,只有在Azzure运行时才发生)(是的,不建议睡眠,{{em>很多不推荐使用睡眠信息的原因可能在这里},但是)。 ..如果它们神奇地保存了您的跑步,则可以通过一些智能等待来确保替换它们
    • 是否有可能在某个特定时间发生故障?运行后经过同一时间开始吗?白天在同一时间?
  4. 如果在代码中使用日期/时间API,请确保系统时间/语言环境/时区设置完全相同。否则在测试运行期间这些日子不会改变。总而言之-围绕日期进行调查。

我知道以上内容更像是一个一般性建议,但是从我的经验来看,这种“随机失败”可能是由任何看起来“不值得关注”的东西引起的。