【发布时间】:2015-06-24 11:10:42
【问题描述】:
我使用 xpath="//div[@class='localityKewordDropDown']/descendant::div[@class='over']/span[text()='Dwarka, New ']
但该元素未被识别。遇到 NosuchElementException。 谁能帮帮我。我想点击图片中突出显示的下拉值。
【问题讨论】:
标签: selenium selenium-webdriver
我使用 xpath="//div[@class='localityKewordDropDown']/descendant::div[@class='over']/span[text()='Dwarka, New ']
但该元素未被识别。遇到 NosuchElementException。 谁能帮帮我。我想点击图片中突出显示的下拉值。
【问题讨论】:
标签: selenium selenium-webdriver
它失败了,因为“新”这个词后面有一个空格。以下应该可以工作。
//div[@class='localityKewordDropDown']/div/div[text()='Dwarka, New ']
或者考虑搜索包含文本的元素,而不是匹配整个文本。
//div[@class='localityKewordDropDown']/div/div[contains(.,'Dwarka, New')]
正如 cathal 所提到的,您正在搜索 div 而不是 span。
编辑:根据您的要求(尽管我不相信“后代”和“//”之间存在区别。
//div[@class='localityKewordDropDown']/descendant::div[text()='Dwarka, New ']
//div[@class='localityKewordDropDown']/descendant::div[contains(text(),'Dwarka, New')]
Contains 是一个 xpath 函数,可让您查询包含值的内容。它可以与属性、节点一起使用,但通常对于查找包含文本的元素最有用。这是因为您对确切字符串的查询失败的原因是因为您寻找的元素用尾随空格填充。 contains 查询将找到您正在寻找的元素,因为它忽略了这个尾随空格。
【讨论】:
我没有看到您的元素周围有任何跨度,请尝试以下操作:
WebElement name = driver.findElement(By.xpath("//div[@id='keyword_suggest']//div[text()='Dwarka, New']"));
【讨论】:
试试这个:
WebElement name = driver.findElement(By.xpath("//*[contains(text()='Dwarka, New')]"));
【讨论】: