Robotframework:如何通过 JavaScript 处理动态内容

Robotframework: How to deal with Dynamic content via JavaScript

目前我正在尝试处理通过 JavaScript 方法添加的动态内容。我希望检索实际正在动态显示的内容,以通过 RobotFramework 进行检查。

写入的帧定义为:

 <frame src="/root/paperform/blank.htm" name="paperform" marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" scrolling="auto" noresize="" framespacing="0">

现在,可能会调用几种方法中的一种,例如: <form name="goNoPluginForm" action="/servlet/PFServlet" method="POST" target="paperform"> <input type="hidden" name="template" value="paperform/error/noPlugin.htm"> </form>

发布的错误是我想要检索的。我尝试使用 "Page Should Contain" 和 "Page Should Contain Element" 关键字,它们都没有带来正确的结果。我确实对这个关键字有感觉,他们只检查初始网络源代码。

现在,我如何检查框架中发布了哪些错误消息?

我已经通过 "Select Frame" 关键字 select 框架,这也成功了。 检索框架的实时内容是我目前卡住的地方。我已经花了一段时间研究这个问题,但我找不到问题的答案。如果您需要更多信息来回答我的问题,请告诉我。在手动调用网页时,一切正常。

加法:

我已经尝试过使用"Wait Until Keyword Succeeds",一个例子:

Wait Until Keyword Succeeds   ${ElementSearchTime}  1s   Page Should Contain Element   ${XPath_PluginElement}

另一个例子:

Wait Until Keyword Succeeds   ${ElementSearchTime}  1s   Page Should Contain   You could still view your document 

遗憾的是没有得到想要的结果。对我来说,如果第一次收到的代码没有更新,那么 "Page Should Contain Element" 可能不是应该使用的关键字。

编辑:是的,我是对的。我应该使用 Selenium2Library 中的 "Current Frame Contains Element" 关键字。

您是否尝试过使用 Wait Until Keyword Succeeds?过去我觉得使用它有点不对劲和肮脏,但许多比我更有经验的人告诉我,这是要走的路。它也让我摆脱了与您类似的情况,用户点击生成行折叠并且 javascript 帮助呈现我们需要的任何东西。当我开始工作时,我会 post 我自己的例子,但这里有一个来自内置文档的基本表格 (http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Wait%20Until%20Keyword%20Succeeds) :

如果重试后关键字仍不成功,则此关键字失败。如果执行的关键字通过,它的 return 值为 returned.

Wait Until Keyword Succeeds 2 min   5 sec   My keyword  argument
${result} = Wait Until Keyword Succeeds 3x  200ms   My keyword

所有正常的失败都被这个关键字捕获。不会捕获由无效语法、测试或关键字超时或致命异常(例如由致命错误引起)引起的错误。

运行 同一关键字在此关键字内多次出现会产生大量输出并显着增加生成的输出文件的大小。从 Robot Framework 2.7 开始,可以使用 --RemoveKeywords WUKS 命令行选项从输出中删除不必要的关键字。 支持将重试指定为重试的次数是 Robot Framework 2.9 中的一项新功能。从 Robot Framework 2.9 开始,变量错误被这个关键字捕获。

承诺的真实示例

${row_link_state}=    Selenium2Library.Get Element Attribute    ${STATIC_TABLE_XPATH}/tbody/tr/td/a@class
Run Keyword If    '${row_link_state}' == '${TABLE_LINK_CLASS_COLLAPSED}'     Click Element    ${STATIC_TABLE_XPATH}/tbody/tr/td/a
...    ELSE    Fail    The row link was not in the expected state
Wait Until Page Contains Element    ${STATIC_TABLE_XPATH}/tbody/tr/td/div/p    10
Wait Until Keyword Succeeds    10s    5s    Element Should Be Visible    ${STATIC_TABLE_XPATH}/tbody/tr/td/div/p
${paragraph_text}=    Get Text    ${STATIC_TABLE_XPATH}/tbody/tr/td/div/p
Should Be Equal    ${STATIC_TABLE_ROW1_TEXT}    ${paragraph_text}

我知道上面的代码块看起来很糟糕。本质上,它正在检查 table 行是否处于由 javascript 处理的预期状态。有问题的 link 在两个值之间轻弹其 class 以描述其状态。如果它处于预期状态,我们单击 table 行,使其展开并显示其内容。您会注意到 Wait Until Page Contains 有点过时,但它仍然有点古怪,它的存在似乎足以减慢速度以提供 repeatable 结果。 wait until keyword successes 然后确保我想要使用的文本在我尝试获取它并将其用作变量之前在页面上可见。这是我能够完成上述工作的唯一方法。

看看上面的操作是否成功,如果遇到问题,post这里的代码和问题,我会帮忙的。