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

标签 c# selenium selenium-webdriver azure-devops webdriverwait

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

在 Azure Devops 上运行时没有配置或设置更改。

我们已遵循此处的所有文档:https://learn.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.

最佳答案

您的代码块中的几行将有助于以更好的方式分析您的问题。

但是,由于您的测试总是因为超时而失败,因此值得一提的是,一般来说,TimeoutException失败 ExpectedConditions 的结果.但是,也可能存在其他问题。

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

WARNING: Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times.

Locator Strategies_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 对于高级定位器来说总是更强大。<
    • 你可以在 Why should I ever use CSS selectors as opposed to XPath for automated testing? 中找到详细的讨论

结论

考虑到上述因素,您需要明智地实现 Locator Strategy 以及上面讨论的其他方法,这将帮助您摆脱超时

关于c# - 随机 Selenium E2e 测试因 Azure DevOps 超时而失败,但在本地和远程 Selenium 上工作(BrowserStack Automate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53190909/

相关文章:

java - 如何使用 WebDriver 验证下拉菜单的启用禁用值?

c# - 如何在验证另一个属性时触发对一个属性的验证,使用自定义 ValidationAttribute 和 INotifyDataErrorInfo

c# - 开发人员视频

java - 尝试提取嵌套 iframe 的 src 属性时出现陈旧元素引用异常

java - 为什么selenium.isConfirmationPresent()在使用chooseCancelOnNextConfirmation后返回true

Python Selenium 启用 Javascript 问题

ruby - HTTP url 在 selenium 测试运行时重定向为 HTTPS

javascript - 如何识别 Selenium 中没有标签的对象?

c# - .Net & C# : Trying to have a transparent image on a button (assigned from IDE)

c# - 将 MenuItem 添加到控制台应用程序中 TrayIcon 的上下文菜单