4

セレンを介して、jqGrid がロードされ、使用する準備ができているかどうかを確認するにはどうすればよいですか。

いくつかの詳細:

  • 私はC#ドライバーを使用しています
  • new WebDriverWait(driver, new TimeSpan(0, 0, 0, 30)).Until(x => loadingdissapearedcondition)Loading..要素がなくなるまで待機するために使用するメソッドがあります。
  • 私も時々このスクリプトを使用します:

private const string script = @"return ($('#{0}').jqGrid('getGridParam', 'reccount') !=x undefined) && ($('#{0}').jqGrid('getGridParam', 'reccount') != 0) && (!$('#load_{0}').is(':visible')) && (!$('#busyIcon').is(':visible'))";

private readonly string waitScript;

waitScript = string.Format(script, jqGridId);

public void WaitUntilLoadIconDissappears()
{
    driver.WaitUntil(MAXWAIT, Wait);
}

public bool Wait()
{
    var executeScript = ((IJavaScriptExecutor) driver).ExecuteScript(waitScript);
    bool result;
    bool tryParse = bool.TryParse(executeScript.SafeToString(), out result);
    return tryParse && result;
}

jqGrid にレコードがあり、読み込みが完了しているかどうかを確認します。

jqGridにローカルデータを使用している場合、上記の2つでさえ、ロードが完了するまでドライバーを待機させないため、もっと良いものが必要です。私はまた、他の人がこの問題にどのように対処しているのが最善の方法であるか、または最低でも興味があります.

4

3 に答える 3

13

以前に Selenium を使用したことがないため、問題を正しく理解しているかどうかわかりません。jqGrid は最初に初期化され、次に (オプションで) サーバーからデータをロードできます。初期化段階で、元の<table id="grid"></table>要素はグリッドである比較的複雑な HTML フラグメントに変換されます。初期化の最後に、テーブルの DOM 要素 ( $("#grid")[0]) は expando を取得しますgrid

したがって、次のようなテストを使用できます

if ($("#grid")[0].grid) {
    // grid is initialized
}

グリッドがすでに初期化されていることを確認します。jqGrid は内部で同じテストを使用します (例については、こちらを参照してください)。

于 2012-08-01T11:22:11.053 に答える
0

これがJavaとjqgridのソリューションです。グリッド データがまだロードされていない場合、右側のページャーには値がないため、単純にその長さを確認してください。isElementPresent、isDisplayed などのメソッドは、グリッドの右ページャー オブジェクトでは機能しないようです。ajax 中は常にページ コードに存在しますが、動的データが読み込まれるとテキスト値が設定されます。

public void waitForGridPagerRight(String gridName) throws Exception {

    for (int second = 0;; second++) {
        if (second >= 15) {
            fail("Timeout.");
        }
        try {
            if (driver
                    .findElement(By.id("pager_" + gridName + "_right"))
                    .getText().length() > 2)
                break;
        } catch (Exception e) {
        }
        Thread.sleep(1000);
    }
}
于 2014-04-09T10:08:48.527 に答える