【问题标题】:Robotframework: How to deal with Dynamic content via JavaScriptRobotframework:如何通过 JavaScript 处理动态内容
【发布时间】:2015-12-30 10:55:51
【问题描述】:

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

发布的错误是我想要检索的。我尝试使用“页面应该包含”和“页面应该包含元素”关键字,这两个关键字都没有带来正确的结果。我确实对这个关键字有感觉,他们只检查初始网络源代码。

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

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

加法:

我已经尝试过使用“等待关键字成功”,例如:

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 

不幸的是,它没有得到想要的结果。对我来说,如果第一次收到的代码没有更新,并且“页面应该包含元素”可能不是应该使用的关键字。

编辑:是的,我是对的。我应该使用 Selenium2Library 中的“当前帧包含元素”关键字。

【问题讨论】:

    标签: javascript forms robotframework frames


    【解决方案1】:

    您是否尝试过使用“等待关键字成功”?过去我觉得使用它有点错误和肮脏,但许多比我更有经验的人告诉我,这是要走的路。在与您类似的场景中,它也让我摆脱了困境,在这种场景中,用户单击生成了行折叠,而 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 Keyword Succeds 关键字,不幸的是它没有达到想要的效果。我要将代码添加到问题中。感谢您的帮助。
    • 示例中设置的时间不太好,第一次是总等待时间,所以在文档示例中,它总共等待两分钟才能找到什么您已将其设置为查找。第二次是间隔,所以在文档示例中,虽然它等待了两分钟,但它每 5 秒主动执行一次检查,以检查您设置它要查找的内容。我想你知道这一点,只是更详细地介绍。那么 ${ElementSearchTime} 的价值是什么?你还确定你的 xpath 是正确的吗?
    • 您是否将测试设置为在失败时截取屏幕截图?如果我是你,我会进入调试模式并检查页面在执行检查时的样子。你能提供更多关于你说不起作用的例子的失败信息吗?
    • 是的,我有屏幕截图,正在显示正确的错误消息(第二个示例)。还选择了正确的帧(一开始完全空白的帧)。 javascript函数动态写入框架,出现正确的文本,但Robotframework找不到文本。所以,即使文本没有被识别,我也没有对元素进行更多的研究。我想当我可以修复文本时,我也可以调试元素。我仍然可以提供哪种故障信息,我也不确定,我会尝试做一些研究并提供
    • 我找到了解决方案,而不是页面应该包含,我使用了当前帧包含关键字。不知道我怎么能监督。非常感谢您的帮助,让我回到了正确的方向。
    猜你喜欢
    • 2010-12-18
    • 2017-02-20
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多