2016-11-18 107 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:」單元格的行,並將返回其中的輸入。

相關問題