PHPユニット(Selenium Serverを使用)で、xpathの特定の要素ノードに特定の文字列値があるかどうかを確認しようとしています。
<table>
<thead></thead>
<tbody>
<tr>
<th>1</th>
<td>value 1</td>
<td>value 2</td>
<td>value c</td>
</tr>
<tr>
<th>2</th>
<td> </td>
<td> </td>
<td> </td>
</tr>
</tbody>
上記のコードで、xpath を使用して
isElementPresent('//table/tbody/tr[last()-0]/td[last()-1]');
それはtrueを返しますが、変更tr[last()-0]
しtr[last()-1]
てもtrueを返しますが、
当然、 はisElementPresent
ループ内で生成された xpath もそのまま (ループ内で使用される$i
およびの整数を置き換えて) ループ内にあるので、それで問題ありませんが、確認したいのは、その中には何もありません$j
for()
xpathを変更すると、上記と同じhtmlコードを使用します
isElementPresent('//table/tbody/tr[last()-$i]/td[last()-1 and text()="${nbsp}"]');
//table/tbody/tr[last()-0]/td[last()-1 and text()="${nbsp}"]
あなたはそれが trueと false を返すと思うでしょう//table/tbody/tr[last()-1]/td[last()-1 and text()="${nbsp}"]
が、ここにキッカーがあります
Firefox用のSelenium IDE 1.10.0プラグインを使用して、xpathをターゲットボックスに入れて検索を押して確認します(必要なときにxpathを見つけることを確認するため、最後//table/tbody/tr[last()-0]/td[last()-1 and text()="${nbsp}"]
の2番目を強調表示せず、強調表示しますxpathが_td
tr
td
tr
//table/tbody/tr[last()-0]/td[last()-2]
//table/tbody/tr[last()-0]/td[text()="${nbsp}"]
私の実験から、テキストが空白である最初のインスタンスのみであるようなxapthを扱っているようです.2番目のtrが
<tr>
<th>2</th>
<td>cows are my friends</td>
<td>let's go to my room pig!</td>
<td> </td>
</tr>
私はisElementPresent('//table/tbody/tr[last()-0]/td[last()-1 and text()="${nbsp}"]');
それを使用していましたが、見ていないのでまだtrueを返しますlast()-1
が、last()-0
だから私の質問は、特定の要素ノードに特定の文字列があるかどうかを確認するにはどうすればよいですか
注1:私はlast()-#
このページで原因を使用していますhttp://www.w3schools.com/xpath/xpath_syntax.aspそれはIE5を言い、後で[0]が最初であり、FirefoxやChromeのような[1]ではないと言います。それが配列のインデックスの仕組みであるため、完全な互換性のために、私は最後のノードから開始し、last()
IE5以降で動作する逆方向に動作し、ノードは同じである必要がありますが、逆方向に移動するロジックは同じであるため、理にかなっています(マイクロソフトがそれを再定義したくない場合)論理)
注 2: テーブルに title または id 属性を追加するだけで簡単に修正できることは十分承知していますが、テストを行っているページは別の人物によって作成されたものであり、テスト ケースに合わせてページを変更することは避けたいと考えています。
注3:私がテストしているテーブルはJSON文字列を使用して入力されているため、テーブルにデータがない場合、そうでない場合は空白です
編集 1: ${nbsp} は php では機能しないようです。Selenium IDE 1.10.0 プラグインでのみ認識されたようですが、Alt を押しながら 0160 と入力してスペースを挿入しても問題なく機能しました。
EDIT 2:当分の間、これを機能させるためにタグに id 属性を追加しました。 @id=[VALUE] および text()=[VALUE] をチェックすることで完全に正常に機能しますが、この質問を取得することはまだ良いでしょうid、title、および/またはクラス属性をすべてのhtmlタグに追加している間、私がテストしていたテーブルを最初に作成した人は明らかにそうしなかったと答え、注2で述べたように、「ページを変更することは避けたい」テストケースに合わせて」