2

ADFで生成されたツリーを持つWebサイトにSeleniumを使用して、テスト用のフレームワークを構築しようとしています。ツリーは次の構造になります。

<table>
<tr>
 <td>
  <div>
   <span>
    <a id="AN_ID" title="Expand" onclick="return false" href="#"></a>
   </span>
   <img>
   <img>
   <span>SOME_TEXT</ span>
  </div>
 </td>
</tr>
<tr></tr>
<tr></tr>
</table>

私が望んでいるのは、次のように、テキストを使用してアンカーの ID を見つけることができる XPath 関数を持つことです。

selenium.getAttribute("xpath=//span[text()='"+text+"']/preceding-sibling::span[1]/child::a@id");

関数が呼び出されたときにテキストが関数に入力される場所。文字列が一意でない場合に問題が発生します。そこで、次のように関数に位置を追加しようとしました。

selenium.getAttribute("xpath=//span[text()='"+text+"']["+occurrence+"]/preceding-sibling::span[1]/child::a@id");

したがって、関数はテキストと文字列のツリー内の出現の両方で呼び出します。これは、最初に出現した ID を見つけるために機能していますが、特定の文字列が 2 番目に出現した ID を見つけることができません。

私も使ってみました

[text()= "" and position()= ""] 

しかし、これはまったく機能しません。

各アンカーは、サブレベル (上記と同じ構造) のすべてのテーブル行を含む新しいテーブルを生成するため、ツリーのサブレベルごとに新しいテーブルが作成されます。

4

2 に答える 2

1

発生は最後にあるはずだと思います:

selenium.getAttribute("xpath=(//span[text()='"+text+"']/preceding-sibling::span[1]/child::a)["+occurrence+"]@id");
于 2012-11-12T18:11:39.257 に答える
0

この HTML 構造は厳密であり、変更することは完全に不可能ですか? これら 2 つのスパンに ID またはクラスを追加することをお勧めします。それだけで解決じゃないですか…?

別の解決策は、 のようなもので 2 つのスパンの最初のものを選択することです//table/tr/td/div/span[1]/a

于 2012-11-12T12:18:01.253 に答える