2016-09-07 33 views
0

我正在使用SeleniumWebdriver來標識元素,並且在一個實例中,我已經在下面定義了一個xPath。如何使用正則表達式提高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')] 

原因爲此,它應該通過其中一個並識別元素。

這裏的問題,有沒有簡單的方法或任何建議,以改善這種xpath,而不是有多個OR操作符。如果你看到theid的唯一變化是確認和_container之間的「數字」。

我確實經歷了老建議,但他們討論了xPath 2.0的功能,在我的情況下無法使用。

+0

不在'Xpath 1.0'中 - 你需要在這裏匹配單個節點。 – Jan

+0

好的,1月,所以我將不得不接受這個長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')] 

由於您的上述xpath使用or表達,你會找出你的列表中匹配的語句之一(假設你使用.FindElement())的第一個元素。

因此,在這種情況下,你可以通過使用簡化它:

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

,因爲所有的id小號包含_container部分。

如果你有你的網頁,與_container部分末端上的其他元素,那麼試試這個:

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

這是一個與多爲不短,但仍然是易於管理。

+0

它比我使用的xPath短。 – Vikram