在JSoup中,以下测试用例应该通过,而不是。
@Test
public void shouldPrintHrefCorrectly(){
String content= "<li><a href=\"#\">Good</a><ul><li><a href=\"article.php?boid=1865&sid=53&mid=1\">" +
"Boss</a></li><li><a href=\"article.php?boid=186&sid=53&mid=1\">" +
"heavent</a></li><li><a href=\"article.php?boid=167&sid=53&mid=1\">" +
"hellos</a></li><li><a href=\"article.php?boid=181&sid=53&mid=1\">" +
"Mr.Jackson!</a></li>";
Document document = Jsoup.parse(content, "http://www.google.co.in/");
Elements links = document.select("a[href^=article]");
Iterator<Element> iterator = links.iterator();
List<String> urls = new ArrayList<String>();
while(iterator.hasNext()){
urls.add(iterator.next().attr("href"));
}
Assert.assertTrue(urls.contains("article.php?boid=181&sid=53&mid=1"));
}
你们有没有人能告诉我为什么会失败?
答案 0 :(得分:1)
有三个问题:
您断言存在bovikatanid
参数,而实际上它名为boid
。
HTML源代码在源代码中使用&
而不是&
。这在技术上是无效的。
Jsoup以某种方式将&mid
解析为|
。它应该扫描到;
。
要修复#1,你必须自己动手。要修复#2,你必须向有问题的serveradmin报告这个问题(这是他们的错,但是,因为普通的浏览器对此感到宽容,我想谷歌正在这样做以节省带宽)。为了解决#3问题,我向Jsoup家伙报告了an issue,看看他对此有何看法。
更新:看,Jonathan(Jsoup家伙)修复了它。它将在下一个版本中出现。