Java 知道为什么这个xpath不是';不行吗?
下面是html元素和我正在运行的命令,它检查页面上是否存在“lol”。它没有找到“lol”,也不知道为什么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">
<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对象吗?如果是的话,那你用它做什么?如果您不知道,我会研究同步问题(例如,您可能需要等待该对象)。谢谢,我会研究一下,看看我能想出什么,