我正在做一个项目,我需要测试一些html输出。为此,我使用JSoup提取要测试的元素,并在输出上运行Assert。我遇到的问题是,JSoup在返回输出之前会“清理”输出,所以我的输出与输入不匹配,即使原始的html是正确的。我遇到的所有建议都建议通过输出设置禁用漂亮的打印。不幸的是,到目前为止,这一解决办法还没有奏效。我不确定我是否只是没有正确地禁用输出格式,或者是否有其他事情发生。如有任何建议将不胜感激。
@Test
public void testJsoupParse()
{
Document testDoc = Jsoup.parse("<html> <span id='sp1'><strong>ABC 123</strong></span> <span id='sp2'>XYZ 098</span> </html>");
testDoc.outputSettings().prettyPrint(false);
String sp1 = testDoc.select("span#sp1").text();
System.out.println(sp1);
String spHtml = testDoc.select("span#sp1").html();
System.out.println(spHtml);
//this should pass, but fails due to the extra space being stripped out
assertThat(sp1).isEqualTo("ABC 123");
//this will also fail since .html() will include the <strong> tags in the output
assertThat(spHtml).isEqualTo("ABC 123");
//this will pass
assertThat(testDoc.select("span#sp2").text()).isEqualTo("XYZ 098");
}
1条答案
按热度按时间gkn4icbw1#
使用
wholeText
代替text
边注:对于你的简单示例html,它可能没有什么区别,但你的选择是不正确的。而不是
使用
selectFirst
或getElementById
,因为你想得到一个Element
。Select返回Elements
(即元素列表)。比如说