我正在尝试为给定的元素编写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 ')]")这让我大错特错。
发布于 2015-08-29 08:53:31
既然你在娱乐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"));发布于 2015-08-29 06:11:41
像这样怎么样?
//span[contains(@class, 'ng-scope') and contains(@class, 'ng-binding') and contains(@class, 'editable')]或者简单地使用CSS选择器:
span.ng-scope.ng-binding.editable发布于 2015-08-29 09:23:08
假设您正确地结束了contains()函数的括号,那么您的初始XPath应该可以用于发布span元素:
$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选择器是最终的解决方案。
https://stackoverflow.com/questions/32280250
复制相似问题