如何获取给定字符串的xpath

时间:2015-08-28 21:48:30

标签: jquery selenium xpath

我正在尝试为给定元素编写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 ')]")

这引起了我的错误。

3 个答案:

答案 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选择器是最终的解决方案。