2011-03-26 2 views
6
selenium.click("gwt-uid-204"); // this is recorded from Selenium IDE 

私の(gwt)Javaアプリケーションのチェックボックスをクリックしています。 gwt-uidはこれまでどおり変更されていますので、IDが変更された場合、自分のアプリケーションに自分の要素が見つかりません。正規表現は私のために働いていないし、私は何を間違っているのか分からない。あなたの助けGWTのid要素がセレンで毎回変更されています

selenium.click("gwt-uid-[0-9]); 

のために、私はセレン1.0.3を使用していますおかげで、2つの解決策は、Java

答えて

0

があります。最初に、Seにあなたがregex:gwt-uid- [0-9]と言って正規表現を使っていることを伝えます。あなたはそれを持っているので、nameとidがそのリテラル文字列である要素を探しています。

もう1つの解決策は、私がhttp://element34.ca/blog/google-web-toolkit-and-idで議論していることの静的IDをオンにすることです。

-Adam

15

多くのGWT要素を明示的にテストとデバッグの目的のための要素にIDを設定できるようにensureDebugId(UIObjectクラスのメソッド)が付属しています。また、モジュールを継承する必要があります。

<inherits name="com.google.gwt.user.Debug"/> 

これを機能させるには、モジュールを継承する必要があります。これの利点は、プロードモードのコンパイル中に継承されたモジュールを削除することによって、実動デプロイメントからトレースを削除できることです。したがって、不要なIDを削除するコード変更はありません。

0

あなたが提示したように、あなたがダイナミックIDを持っていると仮定すると、まずSeleniumのclickメソッドがlocator引数を取ることに気付きます。簡単な方法は、定数 "gwt-uid-"接頭辞で始まるIDを見つけるロケータを指定することです。あなたは技術のあなたの好みに応じて、あなたのclickメソッドに引数としてこれらのロケータのいずれかを使用できます。

 
    == XPath == 
    //input[starts-with(@id, 'gwt-uid-')] 

    == CSS == 
    css=input[id^='gwt-uid-'] 

    == DOM == 
    dom=for each (e in document.getElementsByTagName('input')) if (e.id && (e.id.substr(0, 'gwt-uid-'.length) === 'gwt-uid-')) e 

脚注1:私は私の例では、上記のそれはまだ置くことを前提とし、GWTを使用していません<input>要素のチェックボックス。必要に応じて調整してください。

脚注2:セレンは、アダムが暗示として、正規表現のサポートを提供していますが、それには2つの問題点は、このケースではありますではなく、「正規表現:」:(1)接頭辞は、「正規表現」です。 (2)Seleniumのclickメソッドはではありません。は正規表現のプレフィックスをまったくサポートしていません! (私の経験的証拠は、ロケータは、セレンに一致する引数が行うだけのテキストを正規表現を使用していないことを示唆している)

+0

すべての動的IDが 'gwt-uid-'で始まっている場合、どのように解決しますか?ほとんどのIDはセッション間で異なるgwt-uid-withsomenumberです。 – Swagatika

+0

私の例の3つすべてが正確に言及しているので、他に何を求めているのか分かりません。 (技術的には、プレフィックスに続く数字は必要ありませんが、誤った一致を得ることはほとんどありません)。 –

5

あなたは、このリンクをチェックすることができ 3/4の方法でそれを行うことができます。 3 ways of dealing with GWT dynamic element Ids 約3種類の方法を語りますあなたのGWT要素に静的なidを割り当てること。

また、 すべてのIDを動的にフェッチするカスタムのjavascriptメソッドを記述できます。次に、これらのIDをセレンの処理のために処理できます。

0

Firebugアドオンを使用してGWT UIDを削除することもできます。

  • 右GWT UIDがどこにあるかをクリックし、「 放火犯を持つ要素を検査」を選択 -
  • はGWT UIDは、コード上
  • クリックし、放火魔の窓 が選択表示されたら、「属性IDを削除」 どこ
  • idを削除した後、もう一度右クリックして "Xpath"をコピーしてください。
  • 余分な(/)を追加してターゲットにxpathを貼り付けます。

Thisも役立ちます。

関連する問題