2015-12-02 85 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

相關問題