public void AbstractXPathBuilder_Synthetize_ExactSamePathsButDifferentHierarchies() { HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(GenerateHtmlPageForSynthetizeTests()); HtmlNode article1 = doc.DocumentNode.SelectSingleNode("//*[@id=\"article1\"]/h2"); AbstractXPathBuilder xpath1 = new HtmlXPathBuilder(); xpath1.Build(article1); HtmlNode article2 = doc.DocumentNode.SelectSingleNode("//*[@id=\"article2\"]/h2"); AbstractXPathBuilder xpath2 = new HtmlXPathBuilder(); xpath2.Build(article2); List <AbstractXPathBuilder> list = new List <AbstractXPathBuilder>(); list.Add(xpath1); list.Add(xpath2); AbstractXPathBuilder synthetisis = HtmlXPathBuilder.Synthetize(list); string expectedResult = "/html/body/div/section/article[@id]/h2"; string actualResult = synthetisis.ToString(); Assert.AreEqual(expectedResult, actualResult); synthetisis.Optimize(); string expectedOptimization = "//article[@id]/h2"; string optimizedResult = synthetisis.ToString(); Assert.AreEqual(expectedOptimization, optimizedResult); }