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

时间:2015-10-02 08:51:10

标签: javascript forms robotframework frames

目前我正在尝试处理通过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>

发布的错误是我想要检索的内容。我试图使用&#34; Page Should Contain&#34;并且&#34; Page应该包含元素&#34;关键字,两者都没有带来正确的结果。我确实对这个关键字有这种感觉,他们只检查初始的网络源代码。

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

我通过&#34;选择帧&#34;选择帧。关键字已经成功,也取得了成功。 要检索框架的实时内容,我目前卡住了。我花了一段时间研究这个,但我无法找到问题的答案。如果您需要更多信息来回答我的问题,请告诉我。在手动调用网页时,所有内容都按预期工作。

增加:

我已经尝试使用&#34;等到关键字成功&#34;,一个例子:

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 

遗憾的是没有想要的结果。对我来说,似乎首先收到的代码没有更新,并且&#34; Page应该包含元素&#34;可能不是应该使用的关键字。

编辑:是的,我是对的。我应该使用&#34;当前帧包含元素&#34;来自Selenium2Library的关键字。

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用Wait Until Keyword Succeeds?过去我觉得有点不对劲和肮脏,但是有很多比我更有经验的人告诉我,这是要走的路。它也让我在类似的场景中腌制了用户点击产生行崩溃并且javascript帮助渲染我们需要的东西。我上班时会发布自己的例子,但这里是内置文档的基本表单(http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Wait%20Until%20Keyword%20Succeeds):

如果关键字无论重试都不成功,则此关键字将失败。如果执行的关键字通过,则返回其返回值。

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}

我知道上面的代码块看起来很讨厌。本质上它是检查表行是否处于由javascript处理的预期状态。有问题的链接在两个值之间轻弹它的类来描述它的状态。如果它处于预期状态,我们点击表格行,使其展开并显示其内容。您会注意到Wait Until Page Contains有点过时,但它仍然有点不稳定,它的存在似乎会使事情变慢,从而产生可重复的结果。等待关键字成功然后确保我想要使用的文本在我尝试获取它并将其用作变量之前在页面上可见。这是我能够完成上述工作的唯一方法。

看看您是否在上述方面取得了任何成功,如果您遇到问题,请在此处发布代码和问题,我会帮忙。