【问题标题】:Robot Framework: Set Timeout in Robot framework机器人框架:在机器人框架中设置超时
【发布时间】:2018-04-25 01:05:50
【问题描述】:
我创建了一个框架,我在其中使用了Set Browser Implicit Wait 30
我有 50 个套件,总共包含 700 个测试用例。一些测试用例(200 个 TC)具有查找元素是否存在和元素是否存在的步骤。我的目标是我不想等到 30 秒来检查元素是否存在或元素不存在。我尝试使用 Wait Until Element Is Visible ${locator} timeout=10,希望 Element 只等待 10 秒,但它等待 30 秒。
问题:有人可以帮助我用正确的方法来处理我的框架中的这种情况吗?如果我同意等到 30 秒,完成此类测试用例所需的时间会更多。我目前正在尝试节省 20*200 秒请告知
【问题讨论】:
标签:
python-2.7
selenium
selenium-webdriver
robotframework
【解决方案1】:
最简单的解决方案是在检查元素不存在之前更改隐式等待,然后再将其更改回来。您可以使用关键字set selenium implicit wait 执行此操作。
例如,您的关键字可能如下所示:
*** Keywords ***
verify element is not on page
[Arguments] ${locator}
${old_wait}= Set selenium implicit wait 10
run keyword and continue on failure
... page should not contain element ${locator}
set selenium implicit wait ${old_wait}
【解决方案2】:
您遇到的问题涉及“隐式等待与显式等待”问题。搜索互联网将为您提供很多关于为什么不推荐混合的很好解释,但我认为 Jim Evans(IE Webdriver 的创建者)在stackoverflow answer 中很好地解释了这一点。
提高测试运行的性能通常通过利用以下一项或两项来完成:
- 缩短每个单独测试的持续时间
- 并行运行测试。
缩短测试的持续时间通常意味着完全控制被测应用程序,从而使脚本知道应用程序何时成功加载。这意味着具有低或无隐式等待并专门使用 Fluent 等待(等待条件发生)。这将导致您的测试以您的应用程序允许的速度运行。
这可能意味着要花时间从技术层面了解您测试的应用程序。通过使用custom locator,您仍然可以使用所有常规 SeleniumLibrary 关键字并具有集中等待功能。
并行运行测试从独立运行且不依赖于其他测试的测试开始。在 Robot Framework 中,这意味着拥有可以相互独立运行的测试套件文件。我们大多数人使用Pabot 来并行运行我们的套件,然后合并日志文件。
并行运行多个浏览器应用程序测试意味着同时运行多个浏览器。如果您在 Chrome 中进行测试,则可以在单个主机上完成 - 尽管并不总是推荐。当您运行 IE 时,您需要多个框/会话。然后你开始需要一个Selenium Grid 类型的解决方案来跨多台机器分配执行负载。