2015-12-02 74 views
0

这里是html元素和我正在运行的命令,它检查页面上是否存在“lol”。这不是找到“大声笑”,不知道为什么。任何想法为什么这个XPath不工作?

<svg data-reactid=".0.1.0.0.1.0" height="2129" width="1252"> 
    <g data-reactid=".0.1.0.0.1.0.$http=2//10=1203=167=127=29090/img/103?token=0a11944b491366ab96caf34c8e3991d436c86d655"> 
    <image height="2129px" width="1252px"xlink:href="http://10.203.67.27:9090/img/103?token=a11944b491366ab96caf34c8e3991d436c86d655"> 
    </g> 
    <g data-reactid=".0.1.0.0.1.0.1"> 
    <line class="severity-inactive " data-reactid=".0.1.0.0.1.0.1.$conn2" y2="1209.895121951221" x2="677.0326086956554" y1="708.8012195121894" x1="1126.1195652173908" style="stroke-width: 7;"> 
    <line class="severity-inactive " data-reactid=".0.1.0.0.1.0.1.$conn4" y2="329.7353658536632" x2="841.593360995849" y1="708.8012195121894" x1="1126.1195652173908" style="stroke-width: 7;"> 
    </g> 
    <g data-reactid=".0.1.0.0.1.0.2"> 
    <g data-reactid=".0.1.0.0.1.0.2.$node4"> 
     <circle class="severity3 " data-reactid=".0.1.0.0.1.0.2.$node4.0" r="9.674435999999993" cy="708.8012195121894" cx="1126.1195652173908"> 
     <g data-reactid=".0.1.0.0.1.0.2.$node4.1"> 
     <rect class="node-label-background" data-reactid=".0.1.0.0.1.0.2.$node4.1.0" height="21" width="22" y="716.8012195121894" x="1115.1195652173908"> 
     <text class="node-label" data-reactid=".0.1.0.0.1.0.2.$node4.1.1" y="721.3012195121894" x="1118.1195652173908">lol</text> 
    </g> 
</g> 


By.xpath(//*[name()='svg']/*[name()='text' and text()='"+lol+"']) 
+0

您的意思是'By.xpath(“// * [name()='svg']/* [name()= 'text'和text()='“+ lol +'']”)'(括号内的多余引号)?如果是这样,你的'lol'变量的值是多少? –

+0

lol的值是lol,如下所示:大声笑由于某种原因,它只是没有找到它 – Shawn

+0

所以原来我没有切换到包含所有上述HTML的iframe,这就是为什么我没有看到任何价值和挣扎。现在修复... – Shawn

回答

0

这是正确的XPath:

By.xpath("//*[name()='svg']//*[name()='text' and text()='lol']") 

添加引号,使用 '笑' 字符串(不变量)和前text元素定位器添加第二个斜杠(这不是SVG的直接孩子)。

+0

仍然不能工作悲伤。我想知道是否需要在最后执行'/ preceding-sibling :: circle [@ class ='severity3']'这里。 xpath返回有效,但由于某种原因,它找不到'哈哈'。和lol = lol。 – Shawn

+0

有趣的是,它对我来说非常合适,我只是再次检查它(为''添加两个额外的结束标记后)。不过,我在浏览器的控制台中使用'$ x()'而不是selenium来尝试它,如果这有什么区别的话。当你寻找它时,你是否100%肯定这个标记出现在页面上?你能粘贴你得到的确切的错误/断言失败吗? – xersiee

+0

是的,上面的html显示了文本本身,我也证实了它在dom中的存在。该错误只是一个框架产生的错误消息,指示错误或'大声笑'没有找到,所以它。添加两个额外的结束标记后,你的意思是什么? – Shawn

0

我认为你缺少一个 '/'

此致:By.xpath(//*[name()='svg']/*[name()='text' and text()='"+lol+"'])

矿:By.xpath(//*[name()='svg']//*[name()='text' and text()='"+lol+"'])

+0

仍然无法工作。我想知道是否需要在最后执行'/ preceding-sibling :: circle [@ class ='severity3']'这里。 xpath返回有效,但由于某种原因,它找不到'哈哈'。和lol = lol。 – Shawn

+0

另一件事是你的XML不是真的有效,我必须关闭许多为了xpath工作而打开的元素。也许如果你修复这些,那么xpath将会工作吗? –

+0

我扩展了这些元素,以便真正看到它们。前两个'g data-reactid'为 – Shawn

0

如何 //svg//text[contains(text(),'lol')]

(为一个标签的缘故,他们的选择//*姓名(svg)的效率相当低,直接选择它会好得多;同样在的情况下- 您已经知道标签的名称,只需使用它;最后contains负责搜索文本可能只是整个文本的一部分)

+0

仍然不行。我想知道是否需要在最后执行'/ preceding-sibling :: circle [@ class ='severity3']'这里。 xpath返回有效,但由于某种原因,它找不到'哈哈'。和lol = lol。 – Shawn

+0

@Shawn:上面的xpath将选择整个元素(即' lol')。要检查文本,可以使用getText():'WebElement element = driver.findElement(By.xpath(...));字符串文本=元素。' 也许发布你的代码片段,让我们看看你正在努力实现什么 –

+0

可悲的是,assert.verify代码被埋在框架的高低不平之中,很难把它放在这里。我在想我也许需要打电话给“g”? – Shawn

相关问题