Google Widget Toolkit (GWT) は、とても人気のある強力なツールキットですが、テストしにくいです。動的ツリー コントロールは、とても一般的に使用されている GWT の UI コントロールです。ツリーを展開するには、展開 アイコン要素を識別する必要があります。
動的 GWT ツリーのサンプルは、http://samples.gwtproject.org/samples/Showcase/Showcase.html#!CwTree にあります。
/BrowserApplication//BrowserWindow//DIV[@id='gwt-debug-cwTree-dynamicTree-root-child0']/DIV/DIV[1]//IMG[@border='0']
多くの場合、より良いロケーターを見つける良い方法は、検索する要素の同列要素を探し出すことです。より良いロケーターの同列要素を見つけると、XPath は、これらの同列要素を識別してロケーターを構成することができます。この場合、ツリー項目 Item 0.0 は、展開 アイコンよりも良いロケーターです。ツリー項目 Item 0.0 のロケーターは、コントロールの @textContents プロパティを使用するため、安定した単純なロケーターです。
デフォルトでは、Silk4J は @id プロパティを使用しますが、GWT では @id には ='gwt-uid-<nnn>' のような値 (ここで、<nnn> は同じ要素でも呼出し毎に頻繁に変わります) が含まれるため、たいてい安定したプロパティではありません。
@textContents プロパティを @id の代わりに使用してロケーターを手動で変更できます。
/BrowserApplication//BrowserWindow//DIV[@id='gwt-uid-109']
/BrowserApplication//BrowserWindow//DIV[@textContents='Item 0.0']
もしくは、@id='gwt-uid-<nnn>' を使用しないように Silk4J を設定できます。この場合、Silk4J は自動的に安定したロケーターを記録します。たとえば、@id プロパティで使用されるテキスト パターンをロケーター属性値除外リストに追加ます。この場合、gwt-uid* を除外リストに追加します。
要素の階層を調べると、Item 0.0 コントロールと 展開 アイコン コントロールは、共通のルートノードとして DomTableRow コントロールを持つことが分かります。
/BrowserApplication//BrowserWindow//DIV[@textContent='Item 0.0']
/BrowserApplication//BrowserWindow//DIV[@textContent='Item 0.0']/../..//IMGXPath の ancestor 軸を使うと、より簡単に 展開 アイコンを指定できます。
/BrowserApplication//BrowserWindow//DIV[@textContent='Item 0.0']/ancestor::tr//IMG