2016-11-18 54 views
2

由于每次刷新后每个ID都是随机生成的,所以我不得不使用其他标识符。我基本上希望机器人将文本输入到我指定标识符旁边的字段中。Robot Framework - Selenium2Library - 根据之前的文本输入文本字段

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

我希望文字输入到用户:域,并使用“用户:”作为定位器一起工作。 它适用于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的新手。对不起,我很抱歉。

+1

您是否有能力与开发人员稍微更改HTML标记? –

+0

不,我不 - 我们基本上用Java创建它,然后使用ZK API。他们不能直接触及HTML – Goralight

+0

我在一个项目中遇到了类似的问题。我能够使用Python根据其描述xpaths来计算文本框xpath。因为你的ID看起来很相似,所以你应该可以通过去除多余的描述符ID来完成它。听起来很可怕,但我发现它使得可读性和强大的测试自动化成为可能。 – Pekka

回答

0

看样本,输入的名称属性不会随机生成。如果这是真的话,你可以按照名称使用最琐碎的硒定位策略,例如:

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

读取(:

Input Text name=j_username ${USERNAME} 

如果不是这种情况,这可以通过XPath来完成从左到右清晰,尽管它被评估为LTR):返回输入,它位于td(一个单元格)内,它本身就是一个tr(表格行)的直接子元素,具有该文本的跨度完全匹配在这里)。

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

相关问题