由于每次刷新后随机生成每个ID,我不得不使用其他标识符。我基本上希望Robot将文本输入到指定标识符旁边的字段中。
我希望将文本输入到用户:字段并使用“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抱歉。
答案 0 :(得分:1)
查看示例,输入的name属性看起来不是随机生成的。如果真的如此,你可以按名称使用最简单的Selenium定位策略,例如:
Input Text name=j_username ${USERNAME}
如果不是这种情况,可以通过xpath完成:
//tr[//span[text()="User:"]/td//input
它读取(从右到左的清晰度,虽然它被评估为LTR):返回输入,它位于td(一个单元格)内部,它本身是tr(表格行)的直接子节点,具有带有该文本的跨度(完全匹配)。
因此,定位器会在其中找到包含“User:”的单元格的行,并将返回其中的输入。