4

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

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

我希望将文本输入到用户:字段并使用“用户:”作为要使用的定位器。它适用于 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}

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

我对机器人框架非常陌生。对不起noobness。

4

1 回答 1

1

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

Input Text    name=j_username    ${USERNAME}

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

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

上面写着(为了清楚起见,从右到左,尽管它是 LTR 评估的):返回输入,它位于 td (一个单元格)内,它本身是 tr (表行)的直接子代,具有该文本(此处完全匹配)。

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

于 2017-03-03T08:29:23.383 回答