如何使用正则表达式改进Xpath

时间:2016-09-07 13:33:07

标签: regex selenium xpath

我使用SeleniumWebdriver来识别元素,在其中一个实例中,我已经定义了一个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的功能,这些功能在我的情况下无法使用。

1 个答案:

答案 0 :(得分: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')]

它并不短,但仍然更容易管理。