【问题标题】:Kendo UI grid select row via selenium web driver通过 selenium web 驱动程序的 Kendo UI 网格选择行
【发布时间】:2013-08-02 09:43:24
【问题描述】:

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

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

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

我希望简单地调用 webElement 的 .click(),但这不起作用。所以我尝试构建一个动作:

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() 方法?好吧,似乎是的,但是从我读到的内容中,我还需要重新绑定网格?我能找到的所有例子都是这样的:

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

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

【问题讨论】:

    标签: asp.net-mvc-4 kendo-ui selenium-webdriver


    【解决方案1】:

    好的,我最后是这样的:

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

    【讨论】:

      【解决方案2】:

      不要误会我的意思,我不是 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();
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多