junit 禁用JSoup空白删除

hrirmatl  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(94)

我正在做一个项目,我需要测试一些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");
}
gkn4icbw

gkn4icbw1#

使用wholeText代替text

String sp1 = testDoc.getElementById("sp1").wholeText();
assertThat(sp1).isEqualTo("ABC  123");

边注:对于你的简单示例html,它可能没有什么区别,但你的选择是不正确的。而不是

String sp1 = testDoc.select("span#sp1").text();

使用selectFirstgetElementById,因为你想得到一个Element。Select返回Elements(即元素列表)。比如说

String sp1 = testDoc.selectFirst("span#sp1").wholeText();
String sp1 = testDoc.getElementById("sp1").wholeText();

相关问题