Inheritance: IPersist
コード例 #1
0
ファイル: RequestTests.cs プロジェクト: Ancestry/quality-bot
 public void VerifyRequestArgs()
 {
     //Act
     _request = new Request(_url);
     //Assert
     Assert.IsTrue(_request.Url == _url);
     //Act
     _request = new Request(_url, _browser);
     //Assert
     Assert.IsTrue(_request.Url == _url);
     Assert.IsTrue(_request.Browser == _browser);
     //Act
     _request = new Request(_url, _browser, _viewport);
     //Assert
     Assert.IsTrue(_request.Url == _url);
     Assert.IsTrue(_request.Browser == _browser);
     Assert.IsTrue(_request.ViewportResolution == _viewport);
     //Act
     _request = new Request(_url, _browser, _browserVersion);
     //Assert
     Assert.IsTrue(_request.Url == _url);
     Assert.IsTrue(_request.Browser == _browser);
     Assert.IsTrue(_request.BrowserVersion == _browserVersion);
     //Act
     _request = new Request(_url, _browser, _browserVersion, _viewport);
     //Assert
     Assert.IsTrue(_request.Url == _url);
     Assert.IsTrue(_request.Browser == _browser);
     Assert.IsTrue(_request.BrowserVersion == _browserVersion);
     Assert.IsTrue(_request.ViewportResolution == _viewport);
 }
コード例 #2
0
        //[Test]
        public void SaveComparisonToMongoDb()
        {
            var request1 = new Request();
            request1.Url = "http://www.google.com?timestamp=" + GetTimestamp() + "&scrape=1";

            var request2 = new Request();
            request2.Url = "http://www.google.com?timestamp=" + GetTimestamp() + "&scrape=2";

            var comparison = Compare(request1, request2);

            var persister = PersisterFactory.CreateComparePersisterInstance();
            persister.Save(comparison);

            // verify by retrieving
            var mongoDb = new MongoDbPersister();
            var collection = mongoDb.Database.GetCollection<Comparison>("comparisons");

            // check id
            var query = Query.EQ("_id", comparison.Id);
            var results = collection.Find(query);
            Assert.AreEqual(1, results.Size(), "should only have 1 result returned from MongoDB because Id is unique");
            var returned = results.First();
            Assert.AreEqual(comparison.Id, returned.Id);

            // check type
            log.Debug("returned: " + returned);
            Assert.IsInstanceOf(typeof(Comparison), returned);
        }
コード例 #3
0
        //[Test]
        public void SaveRequestToMongoDb()
        {
            var request = new Request();
            request.Url = "http://www.example.com?timestamp=" + GetTimestamp();

            var persister = PersisterFactory.CreateRequestPersisterInstance();
            persister.Save(request);

            // verify by retrieving
            var mongoDb = new MongoDbPersister();
            var collection = mongoDb.Database.GetCollection<Request>("requests");

            // check id
            var query = Query.EQ("_id", request.Id);
            var results = collection.Find(query);
            Assert.AreEqual(1, results.Size(), "should only have 1 result returned from MongoDB because Id is unique");
            var returned = results.First();
            Assert.AreEqual(request.Id, returned.Id);

            // check url
            query = Query.EQ("Url", request.Url);
            results = collection.Find(query);
            Assert.AreEqual(1, results.Size(), "should only have 1 result returned from MongoDB (if URL is unique)");
            returned = results.First();
            Assert.AreEqual(request.Url, returned.Url);

            // check type
            log.Debug("returned: " + returned);
            Assert.IsInstanceOf(typeof(Request), returned);
        }
コード例 #4
0
        public WebDriverFacade(IWebDriver web, Request request, ITakesScreenshot ss = null, IJavaScriptExecutor js = null)
        {
            _request = request;
            _web     = web;
            _ss      = ss ?? (ITakesScreenshot)web;
            _js      = js ?? (IJavaScriptExecutor)web;

            web.Manage().Timeouts().SetScriptTimeout(new TimeSpan(0, 5, 0));
        }
コード例 #5
0
 public void Setup()
 {
     _request = new Request()
     {
         Url = "http://www.google.com/",
         Browser = "phantomjs"
     };
     _facade = new PhantomJsFacade(_request);
 }
コード例 #6
0
ファイル: QBFakeTests.cs プロジェクト: Ancestry/quality-bot
        //        [Test]
        public void testFakeRequestUrl()
        {
            //Arrange
            Request expectedRequest = new Request("my.url.com");
            //Act
            Request actualRequest = fakeTest.FakeRequest("my.url.com");

            //Assert
            Assert.IsTrue(expectedRequest.Equals(actualRequest));
        }
コード例 #7
0
ファイル: QBFakeTests.cs プロジェクト: Ancestry/quality-bot
        //        [Test]
        public void testFakeRequestDefault()
        {
            //Arrange
            Request expectedRequest = new Request();

            //Act
            Request actualRequest = fakeTest.FakeRequest();

            //Assert
            Assert.IsTrue(expectedRequest.Equals(actualRequest));
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: Ancestry/quality-bot
        public static void CompareFirefoxAndChrome()
        {
            var firefox = new Request("http://www.ancestrystage.com", Browsers.Firefox, "10.0");
            var chrome = new Request("http://www.ancestrystage.com", Browsers.Chrome);

            var qb = new QualityBot.Service();
            var comparisons = qb.CompareDynamic(firefox, chrome);
            var comparison = comparisons.Single();

            DisplayComparisonInfo(comparison);
        }
コード例 #9
0
 public void VerifyCreateFacadeIBrowser()
 {
     var request = new Request
     {
         Url = "http://www.google.com",
         Browser = "firefox"
     };
     var webdriver = NSubstitute.Substitute.For<IWebDriver, ITakesScreenshot, IJavaScriptExecutor>();
     using (var facade = FacadeFactory.CreateFacade(webdriver, request))
     {
         Assert.IsTrue(facade is WebDriverFacade);
     }
 }
コード例 #10
0
        public void VerifySaveToDisc()
        {
            //Arrange
            var uTest = "www.duh.com";
            var req = new Request(url: uTest);
            var rP = new RequestPersister();

            //Act
            rP.SaveToDisc(_path, req);

            //Assert
            Assert.IsTrue(Directory.GetFiles(_path).Length > 0);
        }
コード例 #11
0
ファイル: QBFakeTests.cs プロジェクト: Ancestry/quality-bot
        //        [Test]
        public void testFakeRequestUrlNBrowser()
        {
            //Arrange
            string url = "my.url.com";
            string browser = "mybrowser";
            Request expectedRequest = new Request(url, browser);

            //Act
            Request actualRequest = fakeTest.FakeRequest(url, browser);

            //Assert
            Assert.IsTrue(expectedRequest.Equals(actualRequest));
        }
コード例 #12
0
        public void VerifyRetrieveFromDisc()
        {
            //Arrange
            var uTest = "www.duh.com";
            var req = new Request(url: uTest);
            var rP = new RequestPersister();

            //Act
            rP.SaveToDisc(_path,req);
            var result = rP.RetrieveFromDisc(Directory.GetFiles(_path)[0]);

            //Assert
            Assert.IsTrue(result.Url == uTest);
        }
コード例 #13
0
ファイル: FacadeFactory.cs プロジェクト: Ancestry/quality-bot
        public static IBrowserFacade CreateFacade(IWebDriver webDriver, Request request)
        {
            IBrowserFacade facade;

            if (request.Browser == null || request.Browser.ToLower() != "phantomjs")
            {
                facade = new WebDriverFacade(webDriver, request);
            }
            else
            {
                facade = new PhantomJsFacade(request);
            }

            return facade;
        }
コード例 #14
0
ファイル: FacadeFactory.cs プロジェクト: Ancestry/quality-bot
        public static IBrowserFacade CreateFacade(Request request)
        {
            IBrowserFacade facade;

            if (request.Browser == null || request.Browser.ToLower() != "phantomjs")
            {
                var config = GetConfig(request);
                var web = GetWebDriver(config);
                facade = new WebDriverFacade(web, request);
            }
            else
            {
                facade = new PhantomJsFacade(request);
            }

            return facade;
        }
コード例 #15
0
ファイル: Service.cs プロジェクト: Ancestry/quality-bot
        public Comparison[] Compare(Request requestA, Request requestB, bool persist = true)
        {
            var scrapeA = DoScrape(requestA);
            var scrapeB = DoScrape(requestB);

            // Pass Scrapes to Comparison
            var comparer = new Comparer();
            var comparison = comparer.Compare(scrapeA, scrapeB);

            // Persist Scrapes
            SaveScrapes(persist, scrapeA, scrapeB);

            // Persist Comparison Obj
            SaveComparison(persist, comparison);

            return new[] { comparison };
        }
コード例 #16
0
ファイル: Program.cs プロジェクト: Ancestry/quality-bot
        public static void ComparePageOverTime()
        {
            var qb = new QualityBot.Service();

            var request = new Request("http://www.ancestrystage.com");
            request.Browser = Browsers.IE;
            request.BrowserVersion = "9";

            var scrapeId1 = qb.ScrapeDynamic(request);
            Console.WriteLine("scrape ID: {0}", scrapeId1);

            Thread.Sleep(10000);

            var scrapeId2 = qb.ScrapeDynamic(request);
            Console.WriteLine("scrape ID: {0}", scrapeId2);

            var comparisons = qb.CompareScrapeIds(scrapeId1, scrapeId2, true);
            var comparison = comparisons.First();
            DisplayComparisonInfo(comparison);
        }
コード例 #17
0
ファイル: Service.cs プロジェクト: Ancestry/quality-bot
        public Comparison[] Compare(string urlA, string urlB, bool persist = true)
        {
            // Create Scrape(s)
            var requestA = new Request(urlA);
            var requestB = new Request(urlB);
            var scrapeA = DoScrape(requestA);
            var scrapeB = DoScrape(requestB);

            // Pass Scrape to Comparison
            var comparer = new Comparer();
            var comparison = comparer.Compare(scrapeA, scrapeB);

            // Persist Scrapes
            SaveScrapes(persist, scrapeA, scrapeB);

            // Persist Comparison Obj
            SaveComparison(persist, comparison);

            return new[] { comparison };
        }
コード例 #18
0
ファイル: ScrapeBuilder.cs プロジェクト: Ancestry/quality-bot
        /// <summary>
        /// Scrapes information from a web page.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="pageData">Information pulled from the page.</param>
        /// <returns>An object of type Scrape.</returns>
        public Scrape BuildScrape(Request request, PageData pageData)
        {
            var screenshotSize = new Rectangle(0, 0, pageData.Screenshot.Width, pageData.Screenshot.Height);
            var boundingRectangleIsDefined = BoundingRectangleIsDefined(request.BoundingRectangle);
            ValidateBoundingRectangle(request.BoundingRectangle, screenshotSize, boundingRectangleIsDefined);

            // If bounding rectangle is defined, use it, otherwise use the size of the screenshot
            var boundingRectangle = boundingRectangleIsDefined ? request.BoundingRectangle.Value : screenshotSize;

            // Identify page resources
            var pageResources = _webRequestUtil.HeadCheck(pageData.Resources);

            var page = AssembleScrape(request, pageData, pageResources);

            // Build elements
            _elementProvider.Load(pageData.ElementsJson, pageData.Html, boundingRectangle);
            var elements = _elementProvider.Elements().ToArray();
            page.Elements.AddRange(elements);

            /* If user-defined area is set
             *  Constrain to user-defined area
             * Else
             *  Constrain to existing elements locations
            */
            var clipRect = boundingRectangleIsDefined ? boundingRectangle : ConstrainRectangleToElements(page.Elements);

            // Crop image to bounding rectangle
            var image = ImageUtil.CropImage(pageData.Screenshot, clipRect);
            page.Screenshot = ImageUtil.ImageToBase64(image, ImageFormat.Png);

            // Offset elements LocationOnScreenshot.
            ConstrainElementsToBoundingRectangle(page, clipRect);

            // Cleanup
            image.Dispose();
            pageData.Screenshot.Dispose();

            return page;
        }
コード例 #19
0
ファイル: Service.cs プロジェクト: Ancestry/quality-bot
        public Comparison[] CompareDynamic(dynamic requestA, dynamic requestB, bool persist = true)
        {
            var rA = new Request
            {
                BoundingRectangle = GetRectangle((string)requestA.boundingRectangle),
                Browser = requestA.browser,
                BrowserVersion = requestA.browserVersion,
                IncludeJquerySelector = requestA.includeJquerySelector,
                ExcludeJquerySelector = requestA.excludeJquerySelector,
                Script = requestA.script,
                ViewportResolution = GetSize((string)requestA.viewportResolution),
                Url = requestA.url
            };

            var rB = new Request
            {
                BoundingRectangle = GetRectangle((string)requestB.boundingRectangle),
                Browser = requestB.browser,
                BrowserVersion = requestB.browserVersion,
                IncludeJquerySelector = requestB.includeJquerySelector,
                ExcludeJquerySelector = requestB.excludeJquerySelector,
                Script = requestB.script,
                ViewportResolution = GetSize((string)requestB.viewportResolution),
                Url = requestB.url
            };

            var scrapeA = DoScrape(rA);
            var scrapeB = DoScrape(rB);

            // Pass Scrapes to Comparison
            var comparer = new Comparer();
            var comparison = comparer.Compare(scrapeA, scrapeB);

            // Persist Scrapes
            SaveScrapes(persist, scrapeA, scrapeB);

            // Persist Comparison Obj
            SaveComparison(persist, comparison);

            return new[] { comparison };
        }
コード例 #20
0
ファイル: Service.cs プロジェクト: Ancestry/quality-bot
        public string ScrapeDynamic(dynamic request)
        {
            var sR = new Request
            {
                BoundingRectangle = GetRectangle((string)request.boundingRectangle),
                Browser = request.browser,
                BrowserVersion = request.browserVersion,
                IncludeJquerySelector = request.includeJquerySelector,
                ExcludeJquerySelector = request.excludeJquerySelector,
                Script = request.script,
                ViewportResolution = GetSize((string)request.viewportResolution),
                Url = request.url
            };

            var scrape = DoScrape(sR);

            SaveScrapes(true, scrape);

            return scrape.IdString.Value;
        }
コード例 #21
0
        /// HELPER METHODS ///
        private Scrape Scrape(Request request)
        {
            var scraper = new Service();
            var scrape = scraper.Scrape(request);

            return scrape;
        }
コード例 #22
0
        private Comparison Compare(Request requestA, Request requestB)
        {
            var scrapeA = Scrape(requestA);
            var scrapeB = Scrape(requestB);

            var comparer = new Comparer();
            var compareResult = comparer.Compare(scrapeA, scrapeB);

            return compareResult;
        }
コード例 #23
0
        //[Test]
        public void TestSaveScrapeToFileSystem()
        {
            var url = "http://www.google.com?timestamp=" + GetTimestamp();

            var scraper = new Service();
            var request = new Request(url, _browser, _browserVersion, _resolution);
            var scrape = scraper.Scrape(request);

            var persister = PersisterFactory.CreateScrapePersisterInstance(@"C:\OutputDirectory\TestSaveScrapeToFileSystem");

            // cleanup
            if (Directory.Exists(persister.OutputDir)) Directory.Delete(persister.OutputDir, true);

            // save
            persister.Save(scrape);

            // verify
            Assert.IsTrue(Directory.Exists(persister.OutputDir));

            var files = Directory.GetFiles(persister.OutputDir);
            Assert.IsTrue(files.Any(f => f.Contains("Html.html")));
            Assert.IsTrue(files.Any(f => f.Contains("scrape.json")));
            Assert.IsTrue(files.Any(f => f.Contains("Screenshot.png")));
        }
コード例 #24
0
        //[Test]
        public void TestSaveRequestToFileSystem()
        {
            var request = new Request();
            request.Url = "http://www.example.com?timestamp=" + GetTimestamp();

            var persister = PersisterFactory.CreateRequestPersisterInstance(@"C:\OutputDirectory\TestSaveRequestToFileSystem");

            // cleanup
            if (Directory.Exists(persister.OutputDir)) Directory.Delete(persister.OutputDir, true);

            // save
            persister.Save(request);

            // verify
            Assert.IsTrue(Directory.Exists(persister.OutputDir));

            var files = Directory.GetFiles(persister.OutputDir);
            Assert.IsTrue(files.Any(f => f.Contains("request.json")));
        }
コード例 #25
0
        //[Test]
        public void TestSaveComparisonToFileSystem()
        {
            var timestamp = GetTimestamp();
            var url1 = "http://www.google.com?timestamp=" + timestamp + "&url=1";
            var url2 = "http://www.google.com?timestamp=" + timestamp + "&url=2";

            var request1 = new Request(url1);
            var request2 = new Request(url2);

            var comparison = Compare(request1, request2);

            var persister = PersisterFactory.CreateComparePersisterInstance(@"C:\OutputDirectory\TestSaveComparisonToFileSystem");

            // cleanup
            if (Directory.Exists(persister.OutputDir)) Directory.Delete(persister.OutputDir, true);

            // save
            persister.Save(comparison);

            // verify
            Assert.IsTrue(Directory.Exists(persister.OutputDir));

            var files = Directory.GetFiles(persister.OutputDir);
            Assert.IsTrue(files.Any(f => f.Contains("comparison.json")));
            Assert.IsTrue(files.Any(f => f.Contains("HtmlDiff.html")));
            Assert.IsTrue(files.Any(f => f.Contains("HtmlDiff.png")));
            Assert.IsTrue(files.Any(f => f.Contains("PixelDiff.png")));
        }
コード例 #26
0
ファイル: Service.cs プロジェクト: Ancestry/quality-bot
        private Scrape DoScrape(Request request)
        {
            Scrape scrape;
            using (var facade = FacadeFactory.CreateFacade(request))
            {
                var data = facade.ScrapeData();
                scrape = _scrapeBuilder.BuildScrape(request, data);
            }

            //SerializeData(scrape);

            return scrape;
        }
コード例 #27
0
ファイル: Service.cs プロジェクト: Ancestry/quality-bot
        /// <summary>
        /// Scrapes the current page.
        /// </summary>
        /// <param name="webDriver">The WebDriver instance to use.</param>
        /// <param name="request">The request.</param>
        /// <returns>An object containing information about the web page as a Scrape object.</returns>
        public Scrape ScrapeCurrent(IWebDriver webDriver, Request request)
        {
            Scrape scrape;
            using (var facade = FacadeFactory.CreateFacade(webDriver, request))
            {
                var data = facade.ScrapeData(false);
                scrape = _scrapeBuilder.BuildScrape(request, data);
            }

            return scrape;
        }
コード例 #28
0
ファイル: ServiceTests.cs プロジェクト: Ancestry/quality-bot
        //[Test, Category("Integration")]
        public void VerifyScrapeWithPhantomJS()
        {
            //Arrange
            var qbService = new Service();
            var request = new Request
            {
                Url = "http://www.google.com/",
                Browser = "phantomjs"
            };

            //Act & Assert
            Assert.DoesNotThrow(() =>
            {
                var result = qbService.Scrape(request);
                Assert.IsTrue(result.Url == request.Url);
                Assert.IsTrue(result.Browser == request.Browser);
            });
        }
コード例 #29
0
 public PhantomJsFacade(Request request)
 {
     _request = request;
     Config();
 }
コード例 #30
0
ファイル: QBFakeTests.cs プロジェクト: Ancestry/quality-bot
        //        [Test]
        public void testFakeRequestUrlNBrowserNViewport()
        {
            //Arrange
            string url = "my.url.com";
            string browser = "mybrowser";
            Size viewportsize = new Size(800, 600);
            Request expectedRequest = new Request(url, browser, viewportsize);

            //Act
            Request actualRequest = fakeTest.FakeRequest(url, browser, viewportSize: viewportsize);

            //Assert
            Assert.IsTrue(expectedRequest.Equals(actualRequest));
        }