2013-08-02 33 views
3

我正在尝试为使用kendo网格的应用程序编写UI测试。我使用硒驱动浏览器,并且在网格中选择一行时遇到问题。通过硒web驱动Kendo UI网格选择行

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

IWebElement matterToSelect = MatterToSelectGrid.FindElement(By.XPath("//td[text()='" + matterId + "']/ancestor::tr")); 

我希望简单地调用。点击()的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()方法?好吧,似乎是的,但从我读的东西,我还需要重新绑定网格?所有我能找到的exaples是这个样子:

$("#sourceGrid").data("kendoGrid").select() 

,但我不想给电网从我的测试重新绑定,所以我没有试过。另外,我不确定data()中应该是什么,因为所有的网格都是使用Html帮助器方法设置的,并使用.dataSource方法绑定到操作方法。有没有人有更好的建议?

回答

4

没关系,我做到了,到底这样的:

IJavaScriptExecutor js = Driver as IJavaScriptExecutor; 
      js.ExecuteScript(String.Format("return $('td:contains(\"{0}\")').parent().addClass('k-state-selected');", matterId)); 
0

不要误会我的意思,我不是的XPath的粉丝,但是这是我发现选择在第一排最简单的方法剑道电网。我给了我的网格“ticketGrid”的ID。然后我使用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(); 

希望这有助于