簡體   English   中英

Kendo UI網格選擇行通過selenium web驅動程序

[英]Kendo UI grid select row via selenium web driver

我正在嘗試為使用kendo網格的應用程序編寫UI測試。 我使用selenium來驅動瀏覽器,我在網格中選擇一行時遇到問題。

我能夠像這樣選擇正確的行:

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

我希望簡單地調用.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仍然沒有運氣。 所以我的下一個想法可能是kendo網格有一個我可以使用的select()方法? 好吧似乎是的,但從我讀到的內容我還需要重新綁定網格? 我能找到的所有exaples都是這樣的:

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

但是我不想從測試中重新綁定網格,所以我沒有試過這個。 另外,我不確定data()中應該是什么,因為所有網格都是使用Html輔助方法設置的,並使用.dataSource方法綁定到操作方法。 有沒有人有更好的建議?

好吧,我最后這樣做了:

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

不要誤會我的意思,我不是XPath的粉絲,但這是我發現選擇Kendo網格中第一行的最簡單方法。 我給了我的網格'ticketGrid'的ID。 然后我使用Chrome Dev工具檢查第一行。 然后,您可以右鍵單擊並選擇“復制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();

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM