gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:54:34 25 4
gpt4 key购买 nike

当我在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com