セレンのRC有の問題のためのXPath表
-
13-09-2019 - |
質問
ようにしている選択要素の式で求められます。
/html/body[@id='someid']/form[@id='formid']/div[@id='someid2']/div[@id='']/div[@id='']/div[@id='']/table/tbody[@id='tableid']/tr[7]/td[2]
現在、htmlのことを行って選択は以下のようなものです:
<tr>
<td class="someClass">some text</td>
<td class="someClass2">my required text for verifying</td>
</tr>
いかチェック 私に必要なテキストの検証 すでに存在します。
使用した
selenium.isTextPresent("my required text for verifying");
いのだが、仕事ったと
selenium.isElementPresent("//td[contains(text(),'my required text for verifying')]")
この作品は色々がoccassionallyをランダム相次いで崩壊している。し
selenium.isElementPresent(//*[contains(text(),'my required text for verifying')])
あります。
方法の検証このテキストのページをセレン?
でも問題ありませんのページを時間負荷時のものです。また画面の前に故障が発生し、このページが完全にロードでshouldnt交換"をご覧ください。●
が誰かにご提案ください方を選択し、要素またはその検証このテキストの表示順の設定ができます。
解決
くに位置するCSS:
assertText(selenium.getText("css=.someClass2"), "my required text for verifying");
上記のは、失敗メッセージによisElementPresentでもそのままお使いいただけるCSSロケータ:
assertTrue(selenium.isElementPresent("css=.someClass2"));
がある場合の負荷回まうのを待つの要素に存在する:
selenium.waitForCondition("var value = selenium.isElementPresent('css=.someClass2'); value == true", "60000");
その他のXPathロケータが作業のために、好ましくない場合はCSSを利用ロケータ:
- //td><td>[contains(@クラス'someClass2')
- xpath=id('tableid')/tr[7]/td><td>[2]
- xpath=id('tableid')/系::td[contains(@クラス'someClass2')][7]
他のヒント
私はセレン聞いたことがありません。しかし、あなたの最初のXPathは、不必要に壊れやすく、冗長である。
要素にidを持っている場合は、は、それがユニークです。単に特定の要素を選択するために、そのような長いXPathを使用することは不要です。ちょうどidを持つの最後のの要素を選択します。さらに、私はあなたが時折xyz[@id='']
を選択していることを確認 - あなたは要素を選択しようとしている場合は、<全角> のid属性なしで、あなたの代わりに `XYZ [ない(@id)]を行うことができます。
あなたの初期XPathは基本的に正しいですが、それはこのような何かをするために十分であると仮定します:
//tbody[@id='tableid']/tr[7]/td[2]
今までとにかくHTMLの内容を変更する場合は、しかし、そのような特定の行や列番号を使用すると、トラブルを求めています。また、それはおそらくtbody
要素にidを持って、table
要素にidを持っている非定型のか?
最後に、あなたは宇宙正規化の問題に実行していることができます。 XMLでは、複数の連続するスペースは、多くの場合、単一のスペースと等価であると考えられる、とあなたはそれを考慮していません。 XHTMLはかなり印刷し、あなたの求められているテキストの途中で改行が含まれている場合は特に、それは動作しません。
//td[contains(normalize-space(text()),'my required text for verifying')]
最後に、text()
は、明示的に選択し、
子のテキストノード - テキストがTD(例えば<td><b>my required text for verifying</b></td>
)の直接の子には一致しませんでない場合ので、上記XPathは要素を選択しないであろう。おそらく、あなたはすべての子孫の連結テキスト谷を検索することを意味します:
//td[contains(normalize-space(string(.)),'my required text for verifying')]
最後に、型変換は、XPathで暗黙とすることができるので、string(.)
バージョンにつながる、上記に.
で置き換えることができる:
//td[contains(normalize-space(.),'my required text for verifying')]
それはスペースを正規化し、各td
要素の文字列検索を実行する必要があるため、これは、大規模なドキュメントに遅くなることがあります。あなたはPERF問題が発生した場合、td
要素は、テキストが発生した場所を気にしない場合は、正規化空間をするために正規化することにより、「呼び出し」の数を減らすためにしようと、検査する必要がある、またはどの程度具体的にしてみてください一度(例えば経由/*[contains(normalize-space(.),'my required text for verifying')]
)で全体のdocます。