Robot Framework - Selenium2Library - 根据前面的文本在文本中输入文本

时间:2016-11-18 16:16:16

标签: robotframework selenium2library

由于每次刷新后随机生成每个ID,我不得不使用其他标识符。我基本上希望Robot将文本输入到指定标识符旁边的字段中。

https://vgy.me/3YBIgl.png

我希望将文本输入到用户:字段并使用“user:”作为要使用的定位器。 它适用于xpaths,但我宁愿使用另一种不会那么脆弱的方法。

以下是用于生成表单的HTML

<tbody id="m8DPe" class="z-rows">
<tr id="m8DPf" style="background:#FFFFFF;" class="z-row">
    <td id="m8DPg-chdextr" style="background:#FFFFFF;text-align:left;" class="z-row-inner">
        <div id="m8DPg-cell" class="z-row-content">
            <span id="m8DPg" class="z-label">User:</span>
        </div>
    </td>
    <td id="m8DPh-chdextr" style="background:#FFFFFF;text-align:left;" class="z-row-inner">
        <div id="m8DPh-cell" class="z-row-content">
            <input id="m8DPh" class="z-textbox" value="" type="text" name="j_username">
        </div>
    </td>
</tr>
<tr id="m8DPi" style="background:#FFFFFF;" class="z-row z-grid-odd">
    <td id="m8DPj-chdextr" style="background:#FFFFFF;text-align:left;" class="z-row-inner">
        <div id="m8DPj-cell" class="z-row-content">
        <span id="m8DPj" class="z-label">Password:</span>
        </div>
    </td>
    <td id="m8DPk-chdextr" style="background:#FFFFFF;text-align:left;" class="z-row-inner">
        <div id="m8DPk-cell" class="z-row-content">
            <input id="m8DPk" class="z-textbox" value="" type="password" name="j_password">
        </div>
    </td>
</tr>

我知道它会与此类似:

Input Text    //tr[contains(text(), 'Example') and ...]    ${USERNAME}

但老实说,我不知道。有什么地方我可以读到这个吗?

我是Robot Framework的新手。对于noobness抱歉。

1 个答案:

答案 0 :(得分:1)

查看示例,输入的name属性看起来不是随机生成的。如果真的如此,你可以按名称使用最简单的Selenium定位策略,例如:

Input Text    name=j_username    ${USERNAME}

如果不是这种情况,可以通过xpath完成:

//tr[//span[text()="User:"]/td//input

它读取(从右到左的清晰度,虽然它被评估为LTR):返回输入,它位于td(一个单元格)内部,它本身是tr(表格行)的直接子节点,具有带有该文本的跨度(完全匹配)。

因此,定位器会在其中找到包含“User:”的单元格的行,并将返回其中的输入。