Robot Framework - Selenium2Library - 根据之前的文本输入文本字段
问题描述:
由于每次刷新后每个ID都是随机生成的,所以我不得不使用其他标识符。我基本上希望机器人将文本输入到我指定标识符旁边的字段中。Robot Framework - Selenium2Library - 根据之前的文本输入文本字段
我希望文字输入到用户:域,并使用“用户:”作为定位器一起工作。 它适用于xpaths,但我宁愿使用另一种不会太脆弱的方法。
这里是用来生成表单
<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>
我知道这将是类似这样的东西HTML:
Input Text //tr[contains(text(), 'Example') and ...] ${USERNAME}
但我真的不知道。有什么地方可以阅读吗?
我是Robot Framework的新手。对不起,我很抱歉。
答
看样本,输入的名称属性不会随机生成。如果这是真的话,你可以按照名称使用最琐碎的硒定位策略,例如:
//tr[//span[text()="User:"]/td//input
读取(:
Input Text name=j_username ${USERNAME}
如果不是这种情况,这可以通过XPath来完成从左到右清晰,尽管它被评估为LTR):返回输入,它位于td(一个单元格)内,它本身就是一个tr(表格行)的直接子元素,具有该文本的跨度完全匹配在这里)。
因此,定位器将在其中找到具有“User:”单元格的行,并将返回其中的输入。
您是否有能力与开发人员稍微更改HTML标记? –
不,我不 - 我们基本上用Java创建它,然后使用ZK API。他们不能直接触及HTML – Goralight
我在一个项目中遇到了类似的问题。我能够使用Python根据其描述xpaths来计算文本框xpath。因为你的ID看起来很相似,所以你应该可以通过去除多余的描述符ID来完成它。听起来很可怕,但我发现它使得可读性和强大的测试自动化成为可能。 – Pekka