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); }
public void TestUltraBasique() { const string html_sample_name = "html_sample"; const string element_with_id = "pixel"; const string raw_xpath = "/html[1]/body[1]/div[1]"; HtmlDocument doc = Load(html_sample_name); HtmlNode nodeWithId = doc.GetElementbyId(element_with_id); Assert.AreEqual <string>(nodeWithId.XPath, raw_xpath); AbstractXPathBuilder builder = new HtmlXPathBuilder(); builder.Build(nodeWithId); XPathElement htmlElement = builder.Elements[0]; XPathElement bodyElement = builder.Elements[1]; XPathAttribute classAttribute = bodyElement.Attributes.Find("class"); Assert.IsNotNull(classAttribute); Assert.IsFalse(classAttribute.IsSingular); Assert.IsTrue(classAttribute.IsImportant); XPathElement divElement = builder.Elements[2]; XPathAttribute idAttribute = divElement.Attributes.Find("id"); Assert.IsNotNull(idAttribute); Assert.IsTrue(idAttribute.IsSingular); }
public void TestSingularAndImportantAttributeOptimization() { HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(GenerateHtmlPageForGotoTests()); HtmlNode firstDivNode = doc.DocumentNode.SelectSingleNode("//h1"); AbstractXPathBuilder divBuilder = new HtmlXPathBuilder(); divBuilder.Build(firstDivNode); divBuilder.Optimize(); Assert.AreEqual <string>("//h1[@id=\"list1\"]", divBuilder.ToString()); }
public void TestGotoTowardChild() { HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(GenerateHtmlPageForGotoTests()); HtmlNode firstDivNode = doc.DocumentNode.SelectSingleNode("//div"); AbstractXPathBuilder divBuilder = new HtmlXPathBuilder(); divBuilder.Build(firstDivNode); Assert.AreEqual <string>("/html/body/div", divBuilder.ToString()); HtmlNode firstH1Node = doc.DocumentNode.SelectSingleNode("//h1"); AbstractXPathBuilder h1Builder = new HtmlXPathBuilder(); h1Builder.Build(firstH1Node); Assert.AreEqual <string>("/html/body/div/h1", h1Builder.ToString()); int score = divBuilder.Goto(h1Builder); Assert.AreEqual <string>("./h1", divBuilder.ToString()); Assert.AreEqual(1, score); }