This is what I did in C# to handle Kendo Grid UI filters. Basically in my project they have String, Integer and DomainList filters. So I have divided my code into these 3 parts.
/// <summary>
/// This method is used to Perform based on the Column Name.
/// Column Name should be same as it is displayed in the Grid.
/// </summary>
/// <param name="ColumnName">Column Name of the Grid.</param>
/// <param name="SearchCriteria">Search Criteria applicable for Column Ex:Contains</param>
/// <param name="SearchText">Search Text=Filter Text which needs to be applied on the Column.</param>
/// <param name="ButtonToBeClicked">Filter OR Clear.</param>
public void PerformFilter(string ColumnName, string SearchCriteria, string SearchText, string ButtonToBeClicked)
{
ArrayList TempList = new ArrayList();
try
{
#region Get all the colums from the table and add in Data Column Collection
IList<IWebElement> ColumnList = WorkQueueGridColumns;
for (int ColumnCounter = 0; ColumnCounter < ColumnList.Count; ColumnCounter++)
{
IWebElement ColumnElement = ColumnList[ColumnCounter];
string GridColumnName = ColumnElement.GetAttribute("data-title");
if (GridColumnName != null)
{
GridColumnName = GridColumnName.ToLower();
if (GridColumnName.Equals(ColumnName.ToLower()))
{
IWebElement Element = ColumnElement.FindElement(By.TagName("span"));
IJavaScriptExecutor JSE = _WebDriver as IJavaScriptExecutor;
JSE.ExecuteScript("arguments[0].scrollIntoView", Element);
Element.Click();
break;
}
}
}
IWebElement ActiveElement = _WebDriver.SwitchTo().ActiveElement();
IWebElement FilterButton = ActiveElement.FindElement(By.XPath(@"ancestor::div[count(@*)=0]//button[@type='submit']"));
IWebElement ClearButton = ActiveElement.FindElement(By.XPath(@"ancestor::div[count(@*)=0]//button[@type='reset']"));
BuildControlsForFilter(ActiveElement, ColumnName, SearchCriteria, SearchText);
if (ButtonToBeClicked.ToLower().Equals("filter"))
{
FilterButton.Click();
}
else if (ButtonToBeClicked.ToLower().Equals("clear"))
{
ClearButton.Click();
}
#endregion
}
catch (Exception Ex)
{
throw Ex;
}
}
private void BuildControlsForFilter(IWebElement ActiveElement, string ColumnName, string SearchCriteria, string SearchText)
{
try
{
List<string> ColumnsListtWithInputText = new List<string>();
ColumnsListtWithInputText.AddRange(new string[] { "Company Name", "Owner", "Order SI", "Setup SI","Service Type","Product",
"Country","LOB","Customer#","Order Contact Name","Order Contact Email",
"Order Contact Phone","Order#"});
List<string> ColumnsListtWithInputNumber = new List<string>();
ColumnsListtWithInputNumber.AddRange(new string[] { "Tie#", "Tie Count", "TimeInQueue(Days)","BUID","TimeInSetup(Days)",
"Unit Qty"});
List<string> ColumnsListtWithDomainValues = new List<string>();
ColumnsListtWithDomainValues.AddRange(new string[] { "Status", "Region" });
bool FoundInInputTextList = ColumnsListtWithInputText.Exists(x => x.ToLower().Equals(ColumnName.ToLower()));
bool FoundInInputNumberList = ColumnsListtWithInputNumber.Exists(x => x.ToLower().Equals(ColumnName.ToLower()));
bool FoundInDomainList = ColumnsListtWithDomainValues.Exists(x => x.ToLower().Equals(ColumnName.ToLower()));
IWebElement DropDownIcon = ActiveElement.FindElement(By.XPath("ancestor::div[count(@*)=0]//span[@class='k-icon k-i-arrow-s']"));
DropDownIcon.Click();
IWebElement CurrentActiveElement = _WebDriver.SwitchTo().ActiveElement();
CurrentActiveElement.SendKeys(SearchCriteria);
IWebElement InputText = null;
if (FoundInInputTextList)
{
InputText = ActiveElement.FindElement(By.XPath("ancestor::div[count(@*)=0]/input"));
InputText.SendKeys(SearchText);
}
else if (FoundInInputNumberList)
{
InputText = ActiveElement.FindElement(By.XPath("ancestor::div[count(@*)=0]//input[@class='k-formatted-value k-input']"));
InputText.SendKeys(SearchText);
}
else if (FoundInDomainList)
{
InputText = ActiveElement.FindElement(By.XPath("ancestor::div[count(@*)=0]//span[text()='-Select value-']/parent::span//span[@class='k-icon k-i-arrow-s']"));
InputText.Click();
IWebElement Element = _WebDriver.SwitchTo().ActiveElement();
Element.SendKeys(SearchText);
}
}
catch (Exception Ex)
{
throw Ex;