2016-11-18 18 views
2

リフレッシュ後にすべてのIDがランダムに生成されるため、他の識別子を使用する必要があります。私は基本的に、ロボットが指定した識別子の隣にあるフィールドにテキストを入力したいと思っています。Robot Framework - Selenium2Library - テキストの前にテキストを入力してフィールドに入力します

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

私はテキストがユーザーに入力させたい

:フィールドと「ユーザー:」を使用してロケータとしてで動作するようにします。 これはxpathsで動作しますが、むしろ壊れにくい別の方法を使用します。

Input Text //tr[contains(text(), 'Example') and ...] ${USERNAME} 

しかし、私は正直に知らない:ここでは

は、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> 

を生成するために使用されます。私はこれを読むことができるどこかにありますか?

私はRobot Frameworkの新機能です。いいえ、申し訳ありません。

+1

開発者と協力してHTMLマークアップを少し変更できますか? –

+0

いいえ、私は基本的にJavaで作成し、ZK APIを使用します。彼らは直接HTMLに触れることはできません – Goralight

+0

私はプロジェクトで同様の問題を抱えていました。私はPythonを使用して、テキストボックスのxpathをその記述xpathに基づいて計算することができました。あなたのIDは似ているので、ディスクリプタIDの余分な部分を取り除くことでそれを行うことができます。それは恐ろしいと聞こえるが、私はそれが読みやすくて堅牢なテスト自動化を行うことがわかった。 – Pekka

答えて

0

サンプルを見ると、入力の名前属性はランダムに生成されていません。それはそう本当にだ場合は、名前によって、例えば最も些細なセレンロケータ戦略を使用することができます。

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

読み込み(:付属していない場合

Input Text name=j_username ${USERNAME} 

を、これは、XPathにより達成することができます右から左への明瞭さのために、それはLTRと評価されますが):td(セル)内にある入力を返します。それはtr(テーブル行)の直接の子であり、ここで完全一致)。

したがって、ロケータはセルに「User:」という文字列が含まれている行を見つけ、入力を返します。

関連する問題