2016-09-07 3 views
0

私はSeleniumWebdriverを使用して要素を識別していますが、インスタンスの1つでは、以下のようにxPathの1つを定義しました。正規表現を使用してXpathを改善する方法

//div[contains(@id,'confirm1_container') or contains 
(@id,'confirm2_container') or contains(@id,'confirm3_container') or contains 
(@id,'confirm4_container')or contains 
(@id,'permanentSuppressionPopUp_container')] 

この理由は、その1つを渡して要素を識別する必要があるからです。

ここでの質問は、複数のOR演算子を持つ代わりに、このxpathを改善するための簡単な方法または提案はありますか?あなたはtheidの唯一の変更がconfirmと_containerの間の "number"であることがわかります。

私は古い提案をしましたが、私のケースでは使用できないxPath 2.0の機能について話しています。

+0

「Xpath 1.0」にはありません。ここでは個々のノードに一致する必要があります。 – Jan

+0

ok Jan、だから私はこの長いxPathを受け入れる必要があります – Vikram

+0

おそらくはい。プログラムで文字列をあらかじめループすることができます。 – Jan

答えて

2
//div[contains(@id,'confirm1_container') or contains 
(@id,'confirm2_container') or contains(@id,'confirm3_container') or contains 
(@id,'confirm4_container')or contains 
(@id,'permanentSuppressionPopUp_container')] 

ご上述xpathor式を使用していますので、あなたは(あなたが.FindElement()を使用することを与えられた)のいずれかの文に一致する、リスト内の最初の要素を識別します。

ので、この場合には、あなたが使用することによって、それを簡素化することができます:すべてのあなたのid sが_container一部を含む

//div[contains(@id,'_container')] 

以来。それはあまりと短くないです

//div[contains(@id,'_container') and contains(@id,'confirm') or contains(@id,'permanentSuppressionPopUp')] 

、まだそれは管理が簡単です:あなたは_container一部で終わるページ上の他の要素を持っている場合は

、これを試してみてください。

+0

私が使用していたxPathよりも短いです。 – Vikram

関連する問題