Selenium 随机错误没有意义

标签 selenium docker selenium-webdriver selenium-grid

我在 Specflow 功能文件中有大约 13 个测试,当我运行这些测试时,它们都通过了,除了一个间歇性的(有时它通过没有问题)

当它失败时,我收到以下消息之一:

  • 未知错误:由于页面崩溃而删除 session
  • chrome 无法访问

  • 起初,我认为这可能是由于 chrome 驱动程序版本或 selenium 网格版本,但这并不能解释其他测试通过,并且这个测试经常通过。

    测试在由 docker 容器托管的 selenium 网格上运行。

    似乎很奇怪,它只影响这个测试,它的配置和执行与其他测试没有什么不同,只是它正在执行的步骤,但它甚至没有达到测试的程度。

    如果我重新启动 docker 容器并基本上清理网格,当我自己运行它时,它似乎是从我的 Visual Studio 手动传递的。

    但是当我运行运行它们的 Jenkins 作业时,它失败了

    有什么想法吗?

    堆栈跟踪
    Error Message
    System.InvalidOperationException : unknown error: session deleted because of page crash
    from unknown error: cannot determine loading status
    from tab crashed
      (Session info: headless chrome=64.0.3282.140)
      (Driver info: chromedriver=2.35.528139 (47ead77cb35ad2a9a83248b292151462a66cd881),platform=Linux 4.9.77-31.58.amzn1.x86_64 x86_64)
    TearDown : OpenQA.Selenium.WebDriverException : no such session
      (Driver info: chromedriver=2.35.528139 (47ead77cb35ad2a9a83248b292151462a66cd881),platform=Linux 4.9.77-31.58.amzn1.x86_64 x86_64)
    Stacktrace
       at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
       at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
       at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value)
       at MoneyUITests.Methods.General.WaitForElementAndSelectDd(String dropdown, String option) in C:\Program Files (x86)\Jenkins\workspace\Money - LeadGenTests\MoneyUITests\Methods\General.cs:line 242
       at MoneyUITests.Steps.Banking.LoanSteps.WhenIFillInTheSecredLoanComparisonForm() in C:\Program Files (x86)\Jenkins\workspace\Money - LeadGenTests\MoneyUITests\Steps\Banking\LoanSteps.cs:line 36
       at TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
       at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch match, Object[] arguments)
       at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(IContextManager contextManager, StepInstance stepInstance)
       at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep()
    --TearDown
       at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
       at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
       at OpenQA.Selenium.Remote.RemoteWebDriver.GetScreenshot()
       at MoneyUITests.Methods.General.TakeScreenshot(Object methodName) in C:\Program Files (x86)\Jenkins\workspace\Money - LeadGenTests\MoneyUITests\Methods\General.cs:line 548
       at MoneyUITests.Methods.BaseContext.AfterScenario() in C:\Program Files (x86)\Jenkins\workspace\Money - LeadGenTests\MoneyUITests\Methods\BaseContext.cs:line 46
       at TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
       at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.InvokeHook(IBindingInvoker invoker, IHookBinding hookBinding, HookType hookType)
       at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.FireEvents(HookType hookType)
       at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnScenarioEnd()
    

    更新 :

    这不是内存问题,而是时间问题。

    这可能就是为什么它是断断续续的,我通过注释掉所有内容并在它失败的行上反复试验来进行调试。

    在反复寻找失败的原因之后,我发现在它前面放置一个 Thread.Sleep 解决了错误并且测试正确执行。

    但是为什么它以这种方式失败而不是未知元素异常,我不知道。

    最佳答案

    我将 chromedriver=2.40.565383 更新为 ChromeDriver=2.41.578700 ,platform=Linux 4.4

    还添加我运行

    sudo apt-get 更新

    关于Selenium 随机错误没有意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49008450/

    相关文章:

    python - 单击图像链接 - Selenium/Python

    docker - 从swarm中删除终止的实例(管理器),并恢复swarm状态

    linux - 在 Windows 10 与 Ubuntu Linux 和本地与云上使用 Chrome 驱动程序进行并行测试的 Selenium Webdriver 性能

    java - 从下拉元素中选择值时的 Selenium webdriver-clear 方法用法

    python - MaxRetryError : HTTPConnectionPool: Max retries exceeded (Caused by ProtocolError ('Connection aborted.' , 错误 (111, 'Connection refused' )))

    java - 运行跨浏览器测试时遇到问题

    docker - 如何忽略 dockerfile 非零返回码?

    javascript - 不可靠的点击项 Selenium WebdriverJS

    python-3.x - 在 selenium python 中处理 PopUp

    docker 容器中的 Firebase 身份验证模拟器 UI 无法在本地主机上运行