2016-10-12 10 views
0

通常、Vaadinアプリケーションは、アプリケーションの各ユーザーインターフェイスコンポーネントに対して順次IDを設定します。残念ながら、これらのIDは、テスト自動化の目的ではあまり有効ではありません。動的に生成され、実行時(セッションごとまたは新しいコンポーネントの追加時など)に変更される可能性があります。VaadinアプリケーションのUIコンポーネントの一意のIDを生成する方法は?

テスト自動化では、コンポーネントごとに固有IDと静的IDが必要です(アプリケーションごとに少なくとも1つ)。

A)VaadinのsetId()メソッド[1]を使用して、テスト自動化に適したコンポーネントIDを生成できますか?

B)VaadinのaddStyleName()またはsetStyleName()は、後でIDとして「乱用する」カスタムCSSスタイルを生成すると便利ですか? [3]で説明したように

いくつかのデザインのアイデア:ID割当

  • から

    • 別IDの作成は、コンポーネントにIDを割り当てるID
    • を作成する命名方式を使用
    時間を添付

    [1] https://vaadin.com/api/7.7.3/com/vaadin/ui/Component.html#setId-java.lang.String-

    [2] https://vaadin.com/api/7.7.3/com/vaadin/ui/Component.html#setStyleName-java.lang.String-

    を[3] https://vaadin.com/forum#!/thread/278068

  • 答えて

    0

    A)VaadinのSETID()メソッド[1]テスト自動優しいコンポーネントIDを生成するために利用され?

    はい、廃止予定のsetDebugId()に置き換わりました。インターフェースからコピーされた

    説明:そののJavadocからcom.vaadin.ui.Component

    は目的をテストするため、クライアント側で使用されるコンポーネントの一意のIDを追加します。識別子を一意に保つことは、 プログラマの責任です。

    我々は命名戦略の自動化「フレームワーク」、それはあなたの第三のリンクで説明していますようの任意の種類とそれを使用していませんでした。内部合意に従ってコンポーネントIDを手動で設定します。すべてのコンポーネントにIDを割り当てることはできません(例:menu items)。


    B)VaadinのaddStyleName()またはsetStyleNameは()以降のIDとして "虐待を受けた" ことができ、カスタムCSSスタイルを生成することで役立つことはできますか?

    Aとほぼ同じですが)findElement(By.className("some-class"))を使用して要素を見つけることができます。クラス名(@NotNull文字列クラス名)

    ことで

    のpublic staticは、 "クラス" 属性の値に基づいて要素を検索します。要素に多くの クラスがある場合、これはそれぞれに対して一致します。 値が「1 2 onone」である場合たとえば、次の「クラス名は」sが一致します。 「1」と「2」


    別のオプションは、例えばfindElement(By.xpath("//*[contains(@class, 'column-hiding-toggle')]/span/div[text()='Name']"))、XPathを使用することでしょう。

    非常に強力で柔軟なものの(私は両方By.id & By.classNameがフードの下のXPathを用いて実装されて勘違いしていないよ場合)、その欠点は、ユーザーインターフェースの構造が頻繁に変更された場合、それは高いメンテナンスになることができるということです。

    +0

    ありがとうございます。私はxpathを認識しており、既に広範囲に使用しています。私の質問は主に静的IDを生成する意味でVaadinのサイトで行うことができ、xpathやcssセレクタ(Selenium)の使い方を簡単にし、保守性を向上させることを目的としています。すでに述べたようにインテリジェントなxpathを使用してもUIが変更されてもメンテナンスは問題になる可能性があります。明確なネーミングまたはID戦略には2つの大きな利点があります:1.セレクタの定義がはるかに簡単で高速です。より堅牢であるため、メンテナンスの労力が少なくて済みます。 –

    +0

    テスト自動化の開発とメンテナンスをより効率的に行い、反対側でより信頼性の高いテストを開発者に提供することが、その目的の1つです。 –

    関連する問題