我正在尝试为给定元素编写xpath。
<span editable-text="x.script" e-form="capture" class="ng-scope ng-binding editable">www.google.com</span>
我正在尝试像
这样的东西$x("//span[contains(concat(' ',@class,' '),' ng-scope ng-binding editable ')]")
这引起了我的错误。
答案 0 :(得分:1)
既然你正在娱乐CSS选择器,那么这些呢?所有这些都应该有效
driver.findElement(By.cssSelector("span[editable-text='x.script']"));
driver.findElement(By.cssSelector("span[e-form='capture']"));
driver.findElement(By.cssSelector("span.ng-scope.ng-binding.editable"));
答案 1 :(得分:0)
这样的事情
//span[contains(@class, 'ng-scope') and contains(@class, 'ng-binding') and contains(@class, 'editable')]
或简单地使用CSS选择器:
span.ng-scope.ng-binding.editable
答案 2 :(得分:0)
您的初始XPath应该适用于发布span
元素,前提是您正确关闭了contains()
功能的括号:
$x("//span[contains(concat(' ',@class,' '),' ng-scope ng-binding editable ')]")
^this was missing
然而,结合contains()
和concat()
(如this thread和其他一些地方所述)的技巧意味着匹配单个CSS类。因此,应用相同的方法来匹配3个CSS类的正确方法如下(格式化为可读性):
//span[contains(concat(' ',@class,' '),' ng-scope ')]
[contains(concat(' ',@class,' '),' ng-binding ')]
[contains(concat(' ',@class,' '),' editable ')]
否则,当类顺序不同时,您的XPath无法找到具有相同CSS类集的span
元素。无论如何,匹配CSS类不是XPath选择器的自然任务。如果可能的话,使用@Amey提到的CSS选择器是最终的解决方案。