Asp.net mvc 4 Kendo UI网格通过selenium web驱动程序选择行

Asp.net mvc 4 Kendo UI网格通过selenium web驱动程序选择行,asp.net-mvc-4,kendo-ui,selenium-webdriver,Asp.net Mvc 4,Kendo Ui,Selenium Webdriver,我正在尝试为使用剑道网格的应用程序编写UI测试。我正在使用selenium驱动浏览器,在网格中选择行时遇到问题 我已经能够像这样选择正确的行: IWebElement matterToSelect = MatterToSelectGrid.FindElement(By.XPath("//td[text()='" + matterId + "']/ancestor::tr")); $("#sourceGrid").data("kendoGrid").select() IJavaScriptEx

我正在尝试为使用剑道网格的应用程序编写UI测试。我正在使用selenium驱动浏览器,在网格中选择行时遇到问题

我已经能够像这样选择正确的行:

IWebElement matterToSelect = MatterToSelectGrid.FindElement(By.XPath("//td[text()='" + matterId + "']/ancestor::tr"));
$("#sourceGrid").data("kendoGrid").select()
IJavaScriptExecutor js = Driver as IJavaScriptExecutor;
            js.ExecuteScript(String.Format("return $('td:contains(\"{0}\")').parent().addClass('k-state-selected');", matterId));
我本想简单地调用.click()这个webElement,但没有成功。所以我尝试建立一个行动:

new Actions(Driver).MoveToElement(matterToSelect).Click().Build().Perform();
也没有快乐。好的,用js选择它怎么样

IJavaScriptExecutor js = Driver as IJavaScriptExecutor;
js.ExecuteScript("return $(\"tr[data-uid='" + id + "']\").trigger('click');");
还是没什么,那就直接选择一个,看看它是否有效呢

js.ExecuteScript("return $(\"#sourceGrid > table:nth-child(1) > tbody:nth-child(3) > tr:nth-child(1) > td:nth-child(1)\").click();");
grrrr仍然不走运。所以我的下一个想法是,剑道网格可能有一个select()方法我可以使用?看起来是的,但从我读到的我还需要重新绑定网格?我能找到的所有例子都是这样的:

IWebElement matterToSelect = MatterToSelectGrid.FindElement(By.XPath("//td[text()='" + matterId + "']/ancestor::tr"));
$("#sourceGrid").data("kendoGrid").select()
IJavaScriptExecutor js = Driver as IJavaScriptExecutor;
            js.ExecuteScript(String.Format("return $('td:contains(\"{0}\")').parent().addClass('k-state-selected');", matterId));

但是我不想从测试中重新绑定网格,所以我没有尝试过这个。另外,我不确定data()中应该包含什么内容,因为所有网格都是使用Html helper方法设置的,并使用.dataSource方法绑定到action方法。有谁有更好的建议吗?

好的,我最后是这样做的:

IWebElement matterToSelect = MatterToSelectGrid.FindElement(By.XPath("//td[text()='" + matterId + "']/ancestor::tr"));
$("#sourceGrid").data("kendoGrid").select()
IJavaScriptExecutor js = Driver as IJavaScriptExecutor;
            js.ExecuteScript(String.Format("return $('td:contains(\"{0}\")').parent().addClass('k-state-selected');", matterId));

别误会,我不喜欢XPath,但这是我发现的在剑道网格中选择第一行的最简单方法。我给了我的网格Id“ticketGrid”。然后,我使用Chrome开发工具检查第一行。然后,您可以右键单击并选择“复制XPath”,我得到了以下结果:

//*[@id='ticketGrid']/table/tbody/tr[1]
然后,在specFlow测试中,我有以下内容:

var wait = new WebDriverWait(WebDriver, timeout: TimeSpan.FromSeconds(5));
var firstRow = wait.Until(w => w.FindElement(By.XPath(@"//*@id='ticketGrid']/table/tbody/tr[1]")));
firstRow.Click();
希望这有帮助