3

剣道グリッドを使用するアプリケーションの UI テストを作成しようとしています。ブラウザーを駆動するためにセレンを使用していますが、グリッド内の行を選択するのに問題があります。

次のように正しい行を選択できました。

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 はまだ運がありません。次に考えたのは、剣道グリッドには使用できる select() メソッドがあるのではないかということでした。はい、そうですが、私が読んだことから、グリッドを再バインドする必要もありますか? 私が見つけることができるすべての例は、次のようになります。

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

しかし、テストからグリッドを再バインドしたくないので、これは試していません。また、すべてのグリッドが Html ヘルパー メソッドを使用してセットアップされ、.dataSource メソッドを使用してアクション メソッドにバインドされるため、data() に何を入れるべきかわかりません。誰かにもっと良い提案がありますか?

4

2 に答える 2

4

さて、私は最終的に次のようにしました:

IJavaScriptExecutor js = Driver as IJavaScriptExecutor;
            js.ExecuteScript(String.Format("return $('td:contains(\"{0}\")').parent().addClass('k-state-selected');", matterId));
于 2013-08-05T08:55:14.093 に答える
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();

お役に立てれば

于 2014-09-19T10:48:16.923 に答える