我有一个类似的HTML代码:
<h3> Some Heading </h3>
<p> Some String </p>
<p> more string </p>
<h3> Other heading</h3>
<p> some text </p>
我正在尝试访问Some String
,more string
和some text
。使用java,我试图像这样访问:
List<WebElement> h3Tags = driver.findElements(By.tagName("h3"));
List<WebElement> para = null;
WebElement bagInfo = h3Tags.get(0); //reads first h3
if(bagInfo.getText().contains("carry-on") || bagInfo.getText().contains("Carry-on")){
para = AutoUtils.findElementsByTagName(bagInfo, "p");
System.out.println(para.get(0).getText()); //Null pointer here
}
bagInfo = h3Tags.get(1);
if(bagInfo.getText().contains("checked") || bagInfo.getText().contains("Checked")){
para = AutoUtils.findElementsByTagName(bagInfo, "p");
System.out.println(para.get(0).getText()); //Null pointer here too
}
尝试xpath
"h3['/p']"
,但仍然没有运气。访问这些<p>
字符串的最佳方式是什么?
答案 0 :(得分:2)
尝试使用xpath //h3/following-sibling::p
来匹配所有3个段落
另请注意,您的XPath h3['/p']
不起作用,因为它意味着返回h3
节点,即DOM根节点。谓词['/p']
将始终返回True,因为非空字符串(在您的情况下为'/p'
)始终为True
答案 1 :(得分:0)
要访问某些字符串,更多字符串和某些文字,您可以使用以下定位器策略:< / p>
使用某些字符串
的文本访问节点By.xpath("//h3[normalize-space()='Some Heading']//following::p[1]")
使用更多字符串
的文本访问节点By.xpath("//h3[normalize-space()='Some Heading']//following::p[2]")
要使用某些文字
的文字访问节点By.xpath("//h3[normalize-space()='Other heading']//following::p[1]")
找到这些元素后,您可以使用 getAttribute("innerHTML")
方法提取节点内的文字。