【问题标题】:Run Keyword If - return OK result when no execution was doneRun Keyword If - 未执行时返回 OK 结果
【发布时间】:2017-07-10 08:41:46
【问题描述】:

我对关键字“Run Keyword If”也有疑问。 我研究了几乎所有来自 stackoverflow 的文章,并尝试了很多次不同的解决方案,不幸的是没有任何改进。 我发布那篇文章是希望有人能给我正确的提示。

问题如下:

我尝试做一个检查器来检查一个字段是否存在,该字段在后面

<input type="text" class="select-dropdown" readonly="true" data-activates="select-options-aaf80655-9ef4-37cc-6026-2f5989e82df1" value="Please select organisation">

如果该字段存在,则执行关键字“Select-ORG”,否则跳过。

所以我试图操作的代码如下所示(UPD:11.07):

<li class="step active" data-order="1">
    <div class="step-title waves-effect"><b>General info</b></div>
    <div class="step-content" style="left: 0%; display: block;">
        <div class="row">

            <div class="input-field col s12">
                <div class="btn-types">
                    <div class="btn-group">
                        <button type="button" data-activity-type="1" class="btn btn-primary btn-activity-type selected"><span>Event</span></button>
                        <button type="button" data-activity-type="2" class="btn btn-primary btn-activity-type "><span>Repeating</span></button>
                        <input type="hidden" id="activity_type" name="activity_type" value="1">
                    </div>
                </div>
            </div>
            <div class="clearfix"></div>
            <br>

            <div class="input-field col s12 ">
                <div class="select-wrapper"><span class="caret">▼</span>
                    <input type="text" class="select-dropdown" readonly="true" data-activates="select-options-e1b60306-a7d2-ef9c-ecc9-3df0dec2ac24" value="Please select organisation">
                    <ul id="select-options-e1b60306-a7d2-ef9c-ecc9-3df0dec2ac24" class="dropdown-content select-dropdown" style="width: 1181px; position: absolute; top: 0px; left: 0px; opacity: 1; display: none;">
                        <li class=""><span>Please select organisation</span></li>
                        <li class=""><span>ORG-WITH-IMAGE</span></li>
                        <li class=""><span>ORG-WITHOUT-IMAGE</span></li>
                    </ul>
                    <select id="organisation_id" name="organisation_id" class="initialized">
                        <option value="0">Please select organisation</option>
                        <option value="782">ORG-WITH-IMAGE</option>
                        <option value="783">ORG-WITHOUT-IMAGE</option>
                    </select>
                </div>
                <label for="organisation_id">Organisation</label>
            </div>
            <div class="clearfix"></div>
</li>

机器人框架代码如下:

*** Settings ***
    Resource              Settings.robot
    Resource              Variables.robot
    Library               OperatingSystem

*** Test Cases ***

Check create Event
  Open SiteURL
  Login as Provider
  Events - Add new

*** Keywords ***

Events - Add new
    Sleep   1
    Go To     ${UrlSite}/cms/activity?t=1
    Sleep   1
    Click Element     xpath=(//a[@class="add-btn-new"])[1]
    Sleep   1
    Log To Console    Checke-one
    Sleep   1
    Log To Console    Check-two
    ${CycleValue} =   Run Keyword And Return Status   Element Should Be Visible     //input[@class="select-dropdown"][1]
    Log To Console    Check-three
    Sleep   1
    Log To Console    Check-four
    Run keyword If  ${CycleValue} == "PASS"     Select-ORG
    Log To Console    Check-five
Select-ORG
    Sleep   1
    Click Element     xpath=(//input[@class="select-dropdown"])[1]
    Sleep   1
    Click Element     xpath=//div[@class="row"]/div/div/ul/li[last()]/span
    Sleep   1

CMD display that all is OK

The row that need to click is selected

可能是我的环境有问题:

  • robotframework-3.0.2
  • Python 2.7.11
  • OS X El Capitan 版本。 10.11.6

【问题讨论】:

  • 看起来您可能有拼写错误。“Log To Console Checke-one”是 Checke 末尾的额外 e
  • 这是一个单独创建的关键字,特别是当必填字段存在的情况下,然后“运行关键字If”将执行它。
  • @StefanE ,这不是问题,这是我设置的消息。没关系。
  • ${CycleValue} 变量是否包含值:PASS?您是否尝试过引用:"${CycleValue}" == "PASS" ,因为两者都是字符串。
  • @A.Kootstra,从文档中,robotframework.org/robotframework/latest/libraries/…,结果我应该指出积极的状态,比如“PASS”。所以我做到了,但我没有看到点击必填字段完成。

标签: python selenium selenium-webdriver robotframework


【解决方案1】:

你快到了 - Run Keyword And Return Status 不返回字符串“PASS”/“FAIL”,但它返回一个真正的布尔值 True 或 False。所以你的检查永远不会成功——它会进行字符串匹配比较——但这个简单的改变就可以了:

Run keyword If  ${CycleValue}     Select-ORG

如果${CycleValue} 是True,则将运行Select-ORG,否则 - 不会。

【讨论】:

  • 谢谢,您的提示帮助我找到了解决方案。 xpath中的问题,重复。所以我研究了如何为我的案例检测它。找到解决方案并检查。有用。 Xpath 如下://li[@class="step active"]/div/div/div/div/input[@class="select-dropdown"][1]
  • 嗯,提示是关键字的实际工作方式:) HTH。那个 xpath - 不要使用它 - 它是一个硬编码结构,字面意思是“该类应该有一个 li,然后正好 4 个 divs 向下取另一个类的 input,这是第一个一个(如果该类有多个inputs)”。如果结构发生了一点变化——有一个 div 出去或额外的一个进来,或者其中一些更改为 span——这将会爆炸。
  • 试试这个 - //li[@class="step active"]//input[@class="select-dropdown" and parent::div[@class="select-wrapper"]]。它的内容是“在li 下方的某个地方找到一个具有该类的input,其父级是另一个类的div”;这至少可以保护您免受结构变化的影响。
  • 用你的xpath检查过,它可以工作。非常感谢,现在知道如何编写更完美的 xpath 定位器了。你是对的,设计不稳定,可能会改变,然后将开始最大的修正:)
猜你喜欢
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多