【问题标题】:How can I optimize Robot Framework to speed up testing of an Angular application?如何优化 Robot Framework 以加快 Angular 应用程序的测试?
【发布时间】:2017-10-13 04:38:02
【问题描述】:

我知道优化 Robot Framework 以提高普通应用程序的速度的基础知识,但这不是普通应用程序。这不是尽可能快的问题,因为如果代码在 Angular 应用程序上执行得太快,它会尝试单击未启用或不可见的元素,或尚不存在的元素。时间问题比比皆是,结果是我使用了一个关键字(如下)来普遍减慢我的程序。问题是它是硬编码的,我正在寻找一个更“程序化”(程序化?我不知道确切的术语)的解决方案,它将等待一个元素可点击,然后立即点击它是。

这是我每次单击后使用的关键字(${SLOW_TIME} 是设置为0.5s 的全局变量):

Slow Down
    #   EXAMPLE USAGE
    #   Slow Down   ${SLOW_TIME}
    [Arguments]     ${SLOW_TIME}
    Sleep           ${SLOW_TIME}

这是我当前的解决方案,它是为了验证元素是否已准备好被点击以进行测试验证目的,而不是速度。它不完整(需要“可点击”)并且偶尔会导致程序等待的时间超过它必须的时间:

Verify Element Is Ready
    #   EXAMPLE USAGE
    #   Verify Element Is Ready     id=myElementId
    #   Click Element               id=myElementId
    [Arguments]                     ${element}
    Variable should exist           ${element}
    Wait until element is visible   ${element}
    Wait until element is enabled   ${element}

我知道 Robot Framework 不是为速度而构建的,但是对于长时间的测试,我厌倦了等待它完成 10 分钟什么都不做,却发现我的[Fail] 不正确。如果解决方案涉及 Python、Javascript 或 Java,我可以使用它。

编辑:我目前正在使用 ExtendedSelenium2Library,但它的隐式等待并不总是有效,所以我想要第二层等待,但只要有必要。

【问题讨论】:

  • 这不是一个真正的答案 - 但你说你正在等待 10 分钟,看看它是失败还是通过。为什么不创建一个包含您创建的新测试的小“沙盒”,看看它是否有效。它失败了你会在几秒钟内知道,如果它通过了,你可以将它添加到主文件的末尾。如果这有意义吗?然后,当它添加到主文件时,如果设置和拆卸正确完成,它应该可以正常工作。
  • 这确实有道理,我通常会这样做,但有时与主文件本身的集成会导致失败,即使它不应该这样做,并且运行整个测试以查看它是否一起工作需要这么多时间。
  • 为什么在等待它可见后立即调用element should be visible?这似乎是多余的。
  • 那已经改变了,但我最初有它只是为了确定。
  • 我有完全相同的问题

标签: angularjs performance robotframework


【解决方案1】:

要探索的第一个解决方案是使用专门为基于 Angular 的 Web 应用程序设计的库,例如 AngularJsLibraryExtendedSelenium2Library。据我所知,ExtendedSelenium2Library 是最有效的(但也许并非没有任何问题,我认为它确实存在一些问题)

接下来要知道的是,鉴于您的元素确实是可见的,这并不一定意味着它已准备好被点击。有很多方法可以解决此类问题。

一种方法是在您的测试设置中休眠,给页面一些时间来完全初始化。我个人不喜欢这个解决方案。此解决方案也不适用于在初始文档初始化后动态加载新内容的页面。

另一种方法是将你的 click 元素包装在等待中,或者用 Python 编写你自己的,或者使用类似 Wait Until Keyword Succeeds

【讨论】:

  • 我 +1 了这个答案,因为它包含有用的信息,但它没有回答我的问题,它指的是我试图逐步淘汰的解决方案。我目前正在使用一种高级形式的睡眠,但我想逐步淘汰它,以便更适应个别元素。另外,我已经在使用 ExtendedSelenium2Library(我的错,我忘了提到我正在这样做)。但是,我不知道等待关键字成功,所以谢谢你。
  • @BrandonOlson 你试过 AngularJSLibrary 吗?如果是这样,什么对你不起作用?看过它的代码后,在我看来它包含了你想要的 AngularJS 特定的睡眠功能。
  • 我没有。它与 ExtendedSelenium2 兼容吗?
  • 它在 Selenium2Library 之上使用。所以关键字是互补的。
猜你喜欢
  • 2020-04-14
  • 2018-06-22
  • 2019-10-04
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2013-05-23
相关资源
最近更新 更多