1

SeleniumRCを使用してHTMLページの一部をテストする際に問題が発生しました。要素がページに存在し、ページがロードされたときに表示される場合、問題はありません。SeleniumRCはその要素にアクセスしてその値を取得したり、(入力の場合)書き込むことができます。

ただし、要素が表示されず、javascriptを使用してのみ表示される場合、seleniumはその要素を処理できません。たとえば、2つのdivがあります。

<div id="row2" class="row" onclick="switchTo('row2e');">
   <div class="row label">Address</div>
   <div class="row data">${user.address}</div>
</div>
<div id="row2e" class="row-edit">
   <form id="address-form" name="address-form" method="post" onsubmit="">
     <div class="row label">Address-Must be 5-25 letters or numbers</div>
     <input type="text" id="address" name="address" value="${user.address}"/>
     <button>Change address</button>
   </form>
 </div>

ページが読み込まれると、div "row2"が表示され、"row2e"が非表示になります。「row2」をクリックすると、divが(javascriptを使用して)変更され、「row2」が非表示になり、「row2e」が表示されます。この時点で、SeleniumRCは「row2e」divの入力を管理できません。

JavaScriptを使用して(ページを送信せずに)ページの大きな部分を変更する場合にも同じ問題が発生します。

なぜこれが起こるのか考えはありますか?

4

2 に答える 2

1

変更が発生するまでRCを少し待たせていますか?多くのUIスクリプトフレームワークでは、ランナーは、指示がない限り、実行した操作のインタラクティブな結果を待ちません。通常はiMacros(貧乏人のSelenium)を使用して、自動ポストバックを待つだけですが、JSの実行でさえ、Seleniumを実行している高速コンピューターが待つよりも時間がかかる場合があります。新しく表示されたコントロールにアクセスする前に、0.5秒間スリープさせてください。

于 2010-09-08T01:45:07.543 に答える
0

変化する要素が多いページには、TestPlanを使用することをお勧めします。インテリジェントな待機システムを備えているため、要素が存在しない場合は、しばらく待機してから続行します。これにより、要素が静的であるか動的であるかをあまり気にすることなく、テストを作成できます。

簡単な例として、ここに次のように入力できます。

Click //div[@id="row2"]
Click //div[@id="row2e"]//button

ボタンが動的要素の場合、TestPlanはボタンが表示されるまで数秒待ってからクリックします。ただし、ほとんどの場合、ページをユーザーとして使用するだけで、TestPlanが何をすべきかを判断します。

ところで、HTMLUnitに加えて、バックエンドとしてSeleniumを使用できます。

于 2010-09-12T08:24:41.123 に答える