public void ShouldLoadLibrary(Action <IWebDriver, Uri, TimeSpan?> action, Uri uri, TimeSpan?timeSpan)
        {
            var driver = new WebDriverBuilder().WithNoExternalLibraryLoaded().Build();

            action.Invoke(driver, uri, timeSpan);

            ((IJavaScriptExecutor)driver).Received(3).ExecuteScript(Arg.Any <string>());
        }
        public void ShouldThrowExceptionWhenElementIsNotFoundWithSizzleSelector(string rawSelector)
        {
            var driver = new WebDriverBuilder().WithSizzleLoaded().WithNoElementLocatedBySizzle(rawSelector)
                         .Build();
            var sut = By.SizzleSelector(rawSelector);

            ((Action)(() => sut.FindElement(driver))).Should().Throw <NoSuchElementException>();
        }
        public void ShouldReturnEmptyResultWhenNoElementsAreFoundWithSizzleSelector(string rawSelector)
        {
            var driver = new WebDriverBuilder().WithSizzleLoaded().WithNoElementLocatedBySizzle(rawSelector)
                         .Build();
            var sut    = By.SizzleSelector(rawSelector);
            var result = sut.FindElements(driver);

            result.Should().NotBeNull().And.HaveCount(0);
        }
        public void ShouldFindElementsBySizzleSelector(string rawSelector)
        {
            var driver = new WebDriverBuilder().WithSizzleLoaded().WithElementsLocatedBySizzle(rawSelector)
                         .Build();
            var selector = By.SizzleSelector(rawSelector);
            var sut      = selector.FindElements(driver);

            sut.Should().NotBeNull().And.HaveCount(2);
        }
        public void ShouldReturnEmptyResultWhenNoElementsAreFoundWithJQuerySelector(string rawSelector)
        {
            var driver = new WebDriverBuilder().WithJQueryLoaded().WithNoElementLocatedByJQuery(rawSelector)
                         .Build();
            var selector = JQuerySelector(rawSelector);
            var sut      = selector.FindElements(driver);

            sut.Should().NotBeNull().And.HaveCount(0);
        }
        public void ShouldFindElementByJQuerySelector(string rawSelector)
        {
            var driver = new WebDriverBuilder().WithJQueryLoaded().WithElementLocatedByJQuery(rawSelector)
                         .Build();
            var selector = JQuerySelector(rawSelector);
            var sut      = selector.FindElement(driver);

            sut.Should().NotBeNull();
        }
        public void ShouldExecuteScript(string scriptMethod)
        {
            var script = $"{scriptMethod}();";
            var driver = new WebDriverBuilder().WithTestMethodDefined(scriptMethod).Build();

            driver.ExecuteScript(script);

            ((IJavaScriptExecutor)driver).Received(1).ExecuteScript(script);
        }
        public void ShouldThrowExceptionWhenSearchContextIsNotWebElement(string rawSelector)
        {
            var driver = new WebDriverBuilder().WithSizzleLoaded().WithElementLocatedBySizzle(rawSelector)
                         .WithElementLocatedBySizzle($"body > {rawSelector}").WithPathToElement(rawSelector)
                         .Build();
            var element = new SearchContextBuilder().WithWrappedDriver(driver).Build();
            var sut     = By.SizzleSelector(rawSelector);

            ((Action)(() => sut.FindElement(element))).Should().Throw <NotSupportedException>();
        }
        public void ShouldFindElementWithNestedSizzleSelector(string rawSelector)
        {
            var driver = new WebDriverBuilder().WithSizzleLoaded().WithElementLocatedBySizzle(rawSelector)
                         .WithElementLocatedBySizzle($"body > {rawSelector}").WithPathToElement(rawSelector)
                         .Build();
            var element = new SearchContextBuilder().AsWebElement().WithWrappedDriver(driver).Build();
            var sut     = By.SizzleSelector(rawSelector);
            var result  = sut.FindElement(element);

            result.Should().NotBeNull();
        }
        public void ShouldFindElementWithNestedJQuerySelector(string rawSelector)
        {
            var driver = new WebDriverBuilder().WithJQueryLoaded().WithElementLocatedByJQuery(rawSelector)
                         .WithElementLocatedByJQuery($"body > {rawSelector}").WithPathToElement(rawSelector)
                         .Build();
            var element  = new SearchContextBuilder().AsWebElement().WithWrappedDriver(driver).Build();
            var selector = JQuerySelector(rawSelector);
            var sut      = selector.FindElement(element);

            sut.Should().NotBeNull();
        }
        public void ShouldFindElementBySizzleSelector(string rawSelector)
        {
            // Arrange
            var driver = new WebDriverBuilder().ThatHasSizzleLoaded().ThatContainsElementLocatedBySizzle(rawSelector)
                .Build();
            var selector = By.SizzleSelector(rawSelector);

            // Act
            var result = selector.FindElement(driver);

            // Assert
            result.Should().NotBeNull();
        }
        public void ShouldThrowExceptionWhenSearchContextIsNotWebElement(string rawSelector)
        {
            // Arrange
            var driver = new WebDriverBuilder().ThatHasSizzleLoaded().ThatContainsElementLocatedBySizzle(rawSelector)
                .ThatContainsElementLocatedBySizzle($"body > {rawSelector}").ThatCanResolvePathToElement(rawSelector)
                .Build();
            var element = new SearchContextBuilder().WithWrappedDriver(driver).Build();

            var selector = By.SizzleSelector(rawSelector);

            // Act
            Action action = () => selector.FindElement(element);

            // Assert
            action.ShouldThrow<NotSupportedException>();
        }
        public void ShouldFindElementWithNestedSizzleSelector(string rawSelector)
        {
            // Arrange
            var driver = new WebDriverBuilder().ThatHasSizzleLoaded().ThatContainsElementLocatedBySizzle(rawSelector)
                .ThatContainsElementLocatedBySizzle($"body > {rawSelector}").ThatCanResolvePathToElement(rawSelector)
                .Build();
            var element = new SearchContextBuilder().WithWrappedDriver(driver).ThatIsWebElement().Build();

            var selector = By.SizzleSelector(rawSelector);

            // Act
            var result = selector.FindElement(element);

            // Assert
            result.Should().NotBeNull();
        }
        public void ShouldReturnEmptyResultWhenNoElementsAreFoundWithSizzleSelector(string rawSelector)
        {
            // Arrange
            var driver = new WebDriverBuilder().ThatHasSizzleLoaded().ThatDoesNotContainElementLocatedBySizzle(rawSelector)
                .Build();
            var selector = By.SizzleSelector(rawSelector);

            // Act
            var result = selector.FindElements(driver);

            // Assert
            result.Should().NotBeNull().And.HaveCount(0);
        }
        public void ShouldThrowExceptionWhenElementIsNotFoundWithSizzleSelector(string rawSelector)
        {
            // Arrange
            var driver = new WebDriverBuilder().ThatHasSizzleLoaded().ThatDoesNotContainElementLocatedBySizzle(rawSelector)
                .Build();
            var selector = By.SizzleSelector(rawSelector);

            // Act
            Action action = () => selector.FindElement(driver);

            // Assert
            action.ShouldThrow<NoSuchElementException>();
        }
        public void ShouldFindElementsByJQuerySelector(string rawSelector)
        {
            // Arrange
            var driver = new WebDriverBuilder().ThatHasJQueryLoaded().ThatContainsElementsLocatedByJQuery(rawSelector)
                .Build();
            var selector = By.JQuerySelector(rawSelector);

            // Act
            var result = selector.FindElements(driver);

            // Assert
            result.Should().NotBeNull().And.HaveCount(2);
        }