当使用concat()时,为什么此Selenium XPath表达式无法返回结果?

时间:2013-03-08 15:54:46

标签: css internet-explorer xpath selenium concat

当我在Selenium中使用以下XPath表达式时,它可以正常工作。它找到当前元素的祖先div,其元类属性中包含某个字符串:

inputEl.findElement(By.xpath("ancestor::div[contains(@class, 'x-form-item')]")).getAttribute("class")

它给出的答案是"x-form-item "(注意尾随空格)。

但是,我希望祖先具有x-form-item类,而不是其他类x-form-item-label。所以我改变了表达式如下:

inputEl.findElement(By.xpath("ancestor::div[contains(concat(' ', @class, ' '), ' x-form-item ')]")).getAttribute("class")

然而,一旦到位,Selenium无法找到该元素。它给出了这个错误:

org.openqa.selenium.NoSuchElementException: Unable to find element with xpath == ancestor::div[contains(concat(' ', @class, ' '), ' x-form-item ')] (WARNING: The server did not provide any stacktrace information)

起初我以为我有一些错误,所以为了简化,我删除了前导/尾随空格。据推测,这在语义上与我的第一个工作查询相同:

inputEl.findElement(By.xpath("ancestor::div[contains(concat('', @class, ''), 'x-form-item')]")).getAttribute("class")

然而,这也失败了:

org.openqa.selenium.NoSuchElementException: Unable to find element with xpath == ancestor::div[contains(concat('', @class, ''), 'x-form-item')] (WARNING: The server did not provide any stacktrace information)

所以我的基本问题是,为什么这两个导致不同的字符串?

  • @class
  • concat('', @class, '')

注意:我正在使用IEDriver和IE9

1 个答案:

答案 0 :(得分:0)

为了实现你想要的,你甚至不需要concat('',@ class,'')。 你应该可以使用

By.xpath("ancestor::div[contains(@class, ' x-form-item ')]")

因为你在'@class'标签中寻找'x-form-item',而不是在'@class'标签中查找。