首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机Selenium E2e测试失败是因为Azure DevOps上超时,但是在本地和远程Selenium上工作(BrowserStack自动化)

随机Selenium E2e测试失败是因为Azure DevOps上超时,但是在本地和远程Selenium上工作(BrowserStack自动化)
EN

Stack Overflow用户
提问于 2018-11-07 13:56:57
回答 2查看 2.1K关注 0票数 12

我有一套Selenium测试,它们在我的本地环境中很好地工作,并且使用Browserstack,但是在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自动化(远程selenium)和本地。

代码语言:javascript
复制
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.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-21 19:35:59

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

  1. 在类似情况下,帮助我们的是在测试中临时添加一个录像机,然后从开始到失败在VM上观察测试执行过程。可以在视频中找到一些线索,帮助我们了解我找到了一个C#示例的链接到底出了什么问题。
  2. 此外,我还会再次检查,以确保Azure上的浏览器版本与运行时完全相同。要确保没有“魔法”,关键是要让它们保持不变。默认浏览器窗口大小相同。
  3. 我会对不同考试失败的地方做更详细的分析。
代码语言:javascript
复制
- is it possible to spot the similarities between different test failures. Does it always happen after clicks? after reloading pages? after anything else that is similar? If yes - try with the weirdest yet simple and sometimes lifesaving solution and add a 3-5 sec sleep before/after an action that is before the failure. (add sleeps with a condition to only happen when it's an Azzure run) (yes, sleeps are not recommended and {_a lot of well-known info why they are not recommended could have been here_} but... if they magically save your runs you can then replace them with some smart waits for sure)
- is it possible that failures happen at some certain time? After same time after run start? At the same time during the day?

  1. 如果在代码中使用日期/时间API,请确保系统时间/地区/时区设置完全相同。或者,在测试运行期间,日数不会改变。总之-调查一下约会时间。

我知道上面的建议更像是一个一般性的建议,但根据我的经验,这种“随机失败”可能是由任何看似“不值得注意”的东西造成的。

票数 0
EN

Stack Overflow用户

发布于 2018-11-20 10:30:18

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

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

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

警告:不要混合隐式和显式等待。这样做会导致不可预测的等待时间。

代码语言:javascript
复制
- **ChromeDriver v2.44** : Supports Chrome v69-71 (same as ChromeDriver 2.43, but with additional bug fixes, released Nov 20, 2018)
- **ChromeDriver v2.43** : Supports Chrome v69-71
- **ChromeDriver v2.42** : Supports Chrome v68-70
- **ChromeDriver v2.41** : Supports Chrome v67-69

  • 使用和XPath的CssSelector性能有一些不同。有几个人选择了:
    • 首先,XPath和CSS在性能上没有明显的差别。
    • 在较早的浏览器(如IE8 )中遍历DOM并不适用于CSS,但在XPath中却很好。XPath可以沿着DOM向上走(例如,从子到父),而CSS只能遍历DOM (例如从父到子)。但是,不能在旧浏览器中使用CSS遍历DOM并不一定是件坏事,因为它更多地表明您的页面的设计很差,并且可能受益于一些有用的标记。
    • 支持CSS的一个论点是,它们更易读、更简洁、更简洁,而这是一个主观的调用。
    • https://twitter.com/bjburton提到您应该使用CSS,因为这就是构建应用程序的方式。这使得测试更容易编写、讨论和让其他人帮助维护。
    • https://twitter.com/adamgoucher说要采用一种更混合的方法--首先关注ID,然后是CSS,并且只有在需要的时候才利用XPath (例如,遍历DOM),而对于高级定位器来说,XPath总是更强大。
    • 您可以在为什么我要使用CSS选择器而不是XPath来进行自动化测试?中找到详细的讨论

结论

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53190909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档