Beispiel #1
0
        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);
        }