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

标签 css internet-explorer xpath selenium concat

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

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一起使用

最佳答案

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

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


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

关于css - 为什么在使用concat()时此Selenium XPath表达式无法返回结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15298013/

相关文章:

javascript - 未捕获的类型错误 : Cannot convert undefined or null to object

javascript - 在 Internet Explorer 中使用 calc 转换翻译属性不起作用

javascript - 当给定 xmlns 时,DOM XPath 查询不起作用

python - 无法在python中使用selenium webdriver定位元素

python - 通过 Selenium 中的 xpath 变量查找并执行操作 - Python

javascript - 如何在 Firefox 中镜像文本?

javascript - less 1.4 string.trim() ie8 崩溃

html - 如何让行内元素展开到行高

asp.net - 兼容模式下的 IE9 无法正确显示 CSS 样式

javascript - 自定义 Javascript 未在 Internet Explorer 9 和 10 中触发