Xpath选择第二个文本匹配而不是第一个文本并选择下一个元素

时间:2020-06-22 12:48:06

标签: selenium selenium-webdriver xpath

我正在尝试选择一个具有随机生成类的元素,因此选择该元素的唯一方法是使用xpath

我需要选择的元素是带有上一个标签“城市”的input框,但是问题是它在网站上出现了3次,我想在网站上选择第二个匹配项。

我已经尝试过了,但是它只会选择第一个。

input = driver.find_element_by_xpath("//label[contains(text(),'City')]//following::input")

要选择第二个,我尝试了这个,但是没有用。

input = driver.find_element_by_xpath("//label[contains(text(),'City')]//following::input")[1]

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:0)

您在find_element_by_xpath中缺少“ s”。尝试find_elements_by_xpath

input = driver.find_elements_by_xpath("//label[contains(text(),'City')]//following::input")[1]

您可以确保预期有3个实例与此xpath匹配,例如:

input_all = driver.find_elements_by_xpath("//label[contains(text(),'City')]//following::input")
print("len(input_all):", len(input_all))

答案 1 :(得分:0)

这只会获得第二场比赛:

input = driver.find_element_by_xpath("//label[contains(text(),'City')][2]/input")

答案 2 :(得分:0)

如果您希望获得第二个匹配元素,则可以尝试

WebElement输入= driver.findElements(By.xpath(“ // label [包含(text(),'City')]] // following :: input”))。get(1)

答案 3 :(得分:0)

严格来说,以下XPath可以满足您的需求:

(//input[preceding::label[1][contains(.,"City")]])[2]

在页面上选择符合以下条件的第二个input元素:前面带有包含特定文本的label元素。

相关问题