public void FilterByMultipleColumnShouldWorkProperly(string testCase, Expression <Func <AllTypesModel, object> >[] selectors)
        {
            this.navigator.AllTypesDataPage().GoTo();

            string firstColumnName = this.GetColumnName(selectors.First());
            var    firstInputId    = "column-search-" + firstColumnName.Replace(' ', '-');
            var    table           = new TableElement("table", this.driver);
            var    filterValue     = this.GetRandomValue(selectors.First().Compile());

            table.TypeInInput($"#{firstInputId}", filterValue.ToString());

            string secondColumnName   = this.GetColumnName(selectors.Last());
            var    secondColumnValues = table.GetColumnRowValuesUntilAny(secondColumnName);
            var    secondFilterValue  = secondColumnValues.First();
            var    secondInputId      = "column-search-" + secondColumnName.Replace(' ', '-');

            table.TypeInInput($"#{secondInputId}", secondFilterValue);

            var columnValues = table.GetColumnRowValues(firstColumnName);

            this.AssertColumnValues(columnValues, filterValue, ComparissonTypesEnum.Equal);
            columnValues = table.GetColumnRowValues(secondColumnName);
            this.AssertColumnValues(columnValues, secondFilterValue, ComparissonTypesEnum.Equal);
        }
        public void FilterByColumnShouldWorkProperlyForDateTimes(Expression <Func <AllTypesModel, object> > selector, ComparissonTypesEnum comparissonType)
        {
            string columnName = this.GetColumnName(selector);

            this.navigator.AllTypesDataPage().GoTo();
            var inputId        = "column-search-" + columnName.Replace(' ', '-');
            var table          = new TableElement("table", this.driver);
            var filterValueObj = this.GetRandomValue(selector.Compile());
            var filterValueDT  = comparissonType == ComparissonTypesEnum.DateTime ? (DateTime)filterValueObj : ((DateTimeOffset)filterValueObj).DateTime;

            Thread.Sleep(GlobalConstants.GlobalThreadSleep);
            table.TypeInInput($"#{inputId}", filterValueDT.ToString("r"));
            var columnValues = table.GetColumnRowValuesUntilAny(columnName);

            this.AssertColumnValues(columnValues, filterValueObj, comparissonType);
        }
        public void FilterByColumnShouldWorkProperlyForNonDateTimes(Expression <Func <AllTypesModel, object> > selector, ComparissonTypesEnum comparissonType)
        {
            string columnName = this.GetColumnName(selector);

            if (selector.ToString().ToLower().Contains("nestedmodel"))
            {
                columnName = "Nested Model " + columnName;
            }

            this.navigator.AllTypesDataPage().GoTo();
            var inputId     = "column-search-" + columnName.Replace(' ', '-');
            var table       = new TableElement("table", this.driver);
            var filterValue = this.GetRandomValue(selector.Compile());

            table.TypeInInput($"#{inputId}", filterValue.ToString());
            var columnValues = table.GetColumnRowValuesUntilAny(columnName);

            this.AssertColumnValues(columnValues, filterValue, comparissonType);
        }