public void FindElement_ShouldReturnFirstFoundElement()
        {
            var searchContextMock      = new Mock <ISearchContext>();
            var javaScriptExecutorMock = searchContextMock.As <IJavaScriptExecutor>();

            var resultWebElementMock1 = new Mock <IWebElement>();
            var resultWebElementMock2 = new Mock <IWebElement>();
            var resultWebElementMock3 = new Mock <IWebElement>();

            javaScriptExecutorMock
            .Setup(javaScriptExecutor => javaScriptExecutor.ExecuteScript(It.IsAny <string>(),
                                                                          It.IsAny <IWebElement>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(),
                                                                          It.IsAny <string>()))
            .Returns(new ReadOnlyCollection <IWebElement>(new List <IWebElement>
            {
                resultWebElementMock1.Object,
                resultWebElementMock2.Object,
                resultWebElementMock3.Object
            }));

            var byRegex = new ByRegex("a", new Regex("Pattern"), "a");

            var resultElement = byRegex.FindElement(searchContextMock.Object);

            Assert.AreSame(resultWebElementMock1.Object, resultElement);
        }
        public void FindElement_ShouldThrowExceptionIfNoElementsFound()
        {
            var searchContextMock      = new Mock <ISearchContext>();
            var javaScriptExecutorMock = searchContextMock.As <IJavaScriptExecutor>();

            javaScriptExecutorMock
            .Setup(javaScriptExecutor => javaScriptExecutor.ExecuteScript(It.IsAny <string>(),
                                                                          It.IsAny <IWebElement>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(),
                                                                          It.IsAny <string>()))
            .Returns(new ReadOnlyCollection <IWebElement>(new List <IWebElement>()));

            var byRegex = new ByRegex("a", new Regex("Pattern"), "a");

            Assert.Throws <NoSuchElementException>(() => byRegex.FindElement(searchContextMock.Object));
        }
        public void FindElements_ContextIsNotWebElement_ScriptIsExecutedWithNullAsElement()
        {
            var searchContextMock      = new Mock <ISearchContext>();
            var javaScriptExecutorMock = searchContextMock.As <IJavaScriptExecutor>();

            const string propertyName = "propertyName";
            const string tagsFilter   = "a";
            var          regex        = new Regex("Pattern");

            var byRegex = new ByRegex(propertyName, regex, tagsFilter);

            byRegex.FindElements(searchContextMock.Object);

            javaScriptExecutorMock.Verify(javaScriptExecutor => javaScriptExecutor.ExecuteScript(It.IsAny <string>(), null, tagsFilter, propertyName, "Pattern", string.Empty), Times.Once);
        }