57

Seleniumを使用していくつかのテストを作成しようとしているGWTアプリケーションがあります。

XPathを使用して、テスト用のページ上の要素を識別しています。値はGWTによって自動生成され、変更される可能性があるため、使用idは機能しません。id次のようにラベルでボタンを見つけることができることに気付いたとき、物事は順調に進み始めました。

//button[.='OK']

しかし、複数のテストを実行し始めると、問題が発生し始めました。問題は、Javascriptによって生成されたGWTアプリのすべての異なる「ページ」がHTMLの非表示<div>要素に残っていることであることに気付きました。つまり、Seleniumのテストでは、現在のビューに表示されているボタンではなく、非表示のボタンをクリックすることがありました。

Firebugを使用してHTMLを調べると、GWTは属性に追加することで<div>要素を非表示にしているようです。これは、次のようにすべての非表示の[OK]ボタンを見つけることができることを意味します。display: nonestyle

//div[contains(@style,'display: none')]//button[.='OK']

これにより、すべての非表示のOKボタン、つまり、にあること<div>によって非表示になっている祖先を持つボタンが検索さdisplay: nonestyleます。

私の質問は、XPathを使用して表示されている[OK]ボタンのみを検索するにはどうすればよいですか?に祖先<div>要素がないボタンを見つけるにはどうすればよいですか?display: nonestyle

4

7 に答える 7

70

これはうまくいくはずです:

.//button[.='OK' and not(ancestor::div[contains(@style,'display:none')])
and not(ancestor::div[contains(@style,'display: none')])]

編集:

以下のより単純で効率的な式:

//div[not(contains(@style,'display:none'))]//button[.='OK']

すべてのボタンには、その祖先に表示される div が少なくとも 1 つあるため、正しく機能しません。

于 2009-03-16T19:24:41.800 に答える