Java 知道为什么这个xpath不是';不行吗?

Java 知道为什么这个xpath不是';不行吗?,java,selenium,xpath,selenium-webdriver,Java,Selenium,Xpath,Selenium Webdriver,下面是html元素和我正在运行的命令,它检查页面上是否存在“lol”。它没有找到“lol”,也不知道为什么 <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">

下面是html元素和我正在运行的命令,它检查页面上是否存在“lol”。它没有找到“lol”,也不知道为什么

<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+"'])

英雄联盟
By.xpath(//*[name()='svg']/*[name()='text'和text()='“+lol+”]))
这是正确的xpath:

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

添加引号,使用'lol'字符串(非变量)并在
文本
元素定位器(这不是svg的直接子元素)之前添加第二个斜杠。

我认为您缺少了一个'/'

您的:
By.xpath(//*[name()='svg']/*[name()='text'和text()='“+lol+”])

我的:
By.xpath(//*[name()='svg']/*[name()='text'和text()='“+lol+”])

怎么样
//svg//text[包含(text(),'lol')]


(选择
/*
以获得一个标记,您知道该标记的名称(
svg
)非常低效,直接选择它要好得多;类似地,在
text
的情况下-您已经知道标记的名称,所以只需使用它;最后
contains
会考虑到这样一个事实,即搜索的文本可能只是整个文本的一部分)

您的意思是
By.xpath(//*[name()=“svg']/*[name()=“text”和text()=“lol+“]”)
(括号内有额外的引号)?如果是这样的话,你的
lol
变量的值是多少?lol的值是lol,如图所示:出于某种原因,lol没有找到它,所以我没有切换到iframe,它包含上面所有的HTML,这就是为什么我没有看到任何值,也没有挣扎。已修复…仍然无法正常工作。我想知道这里是否需要在末尾执行
/previous sibling::circle[@class='severity3']
。xpath正在返回valid,但由于某些原因,它找不到'lol'。lol=lol。另一件事是您的XML不是真正有效的,为了让xpath工作,我必须关闭许多保持打开状态的元素。也许如果你解决了这些问题,xpath就可以工作了?我扩展了元素,这样就可以真正看到它们了。前两个
g data reactid
仍然无法正常工作。我想知道这里是否需要在末尾执行
/previous sibling::circle[@class='severity3']
。xpath正在返回valid,但由于某些原因,它找不到'lol'。而且lol=lol。有趣的是,它对我来说非常有效,我刚刚再次检查了它(在为
添加了两个额外的结束标记之后)。然而,我在浏览器的控制台中使用了
$x()
,而不是selenium,如果这有什么不同的话。当您查找此标记时,是否100%确定此标记存在于页面上?你能粘贴你得到的错误/断言失败吗?是的,上面的html显示了文本本身,我也确认了它在dom中的存在。该错误只是框架生成的错误消息,指示找不到false或'lol',因此就到此为止。在添加了两个额外的结束标记后,你是什么意思?仍然无法正常工作。我想知道这里是否需要在末尾执行
/previous sibling::circle[@class='severity3']
。xpath正在返回valid,但由于某些原因,它找不到'lol'。lol=lol.@Shawn:上面的xpath将选择整个元素(即
lol
)。要检查文本,可以使用getText():
WebElement=driver.findElement(By.xpath(…);String text=element.getText()可能会发布一段代码片段,让我们看看您试图通过assert实现什么。验证代码是否隐藏在框架的Heigharcy中,很难将其放在这里。我想我可能需要调用“g”?@Shawn:没有代码,我不能说任何具体的东西,但imo xpath不是你的问题,根据你提供的html片段,它看起来是正确的。其余的取决于失败的原因:xpath求值的结果是WebElement对象吗?如果是的话,那你用它做什么?如果您不知道,我会研究同步问题(例如,您可能需要等待该对象)。谢谢,我会研究一下,看看我能想出什么,