获取不到文字的原因是文字不在br标签中。
<打开br标签/>关闭
此外,如果您read a bit more about it,即使/> 也超出了要求。如果您只有<br>,则文本不会包含在其中,因为:
<br> 标签是一个空标签,这意味着它没有结束标签。
重点是,您的所有文本都是 h2。你需要尽你所能来处理它。
要解决您的问题,您需要:
-
.getAttribute("innerHTML") - 这将为您提供带有 br 标签的 h2 的所有文本
- 在字符串
<br> 上拆分您的字符串(请注意,在 chrome 中,我的 <br /> 变为 <br> - 您可能需要对此进行调整)李>
- 选择
item[2] 或执行 lamda 以选择包含您的文本的项目(选择您觉得更舒服的项目)
这些步骤如下所示:
//Get the element,
var h2Element = driver.findElement(By.xpath("//*[text()[contains(.,'Telefon')]]"));
var myTextArray = h2Element.getAttribute("innerHTML").split("<br>");
//approach 1 - just print the [1] item
var approach1Text = myTextArray[2];
System.out.println(approach1Text);
//aproach 2 - use a lamda to select by contains
var approach2Text = Arrays.stream(myTextArray).filter(a -> a.contains("Telefon")).findFirst().get();
System.out.println(approach2Text);
额外说明 - 你可能很高兴让你的 xpath 工作,因为br 标签将文本分成单独的元素。结果,您的 h2 实际上有多个 text() 值。它有 text()、text()[2]、text()[3] 等 - 与 brs 一样多
我整理了一个简单的页面来为您测试 - 只是为了向您展示发生了什么:(注意开发工具中的 xpath)
这是text()[3],因为 xpath 的索引是从 1 开始的(与上面从 0 开始的 java 代码比较)。然而 - 这只是为什么它很棘手的一个例子,我不建议你这样做。
消除<br>(和其他标签!)对文本的影响的简单方法是使用normalize-space()。
这样的 xpath 很有效,而且非常容易遵循。
//h2[contains(normalize-space(),'Telefon')]
映射到我的示例页面确定:
如果你有更多的文本分割对象,我会分享这个额外的内容,它可以帮助你。
...所有这一切 - 让您的原始 xpath 工作做得很好。那也不错。