我使用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的功能,这些功能在我的情况下无法使用。
答案 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')]
它并不短,但仍然更容易管理。