0

私は Telerik.Testing.Framework.2012.2.1527 を使用しています。以下のコードを使用しています。「findElem」で常に null を取得しています。しかし、デバッグモードのときは問題ありません。WaitUntilReady(); 私にとって期待どおりに機能していません。私のシナリオでは、waitforelement を使用してタイムアウトを指定するべきではありません。

   public bool IsPresentbyInputId(string findCondition)
    {
            Manager.ActiveBrowser.WaitUntilReady();
            Element findElem = Manager.ActiveBrowser.Find.ByExpression(new HtmlFindExpression("tagname=input", "id=" + findCondition));
            Manager.ActiveBrowser.WaitUntilReady();
            return findElem != null && !findElem.Attributes.Any(s => s.Value.Contains("display:none"));         
    }

ここで何が欠けているか教えてもらえますか?

4

1 に答える 1

0

ご連絡が遅くなりましたことをお詫び申し上げます。

覚えておくべきことの 1 つは、WaitUntilReady がブラウザーの「準備完了」フラグを監視していることです。このフラグは、ブラウザーがメイン HTML ページ (MyPage.html など) と参照リソース (画像、css ファイル、js ファイルなど) を処理するとすぐに設定されます。ページが読み込まれると、JavaScript が制御を取得した結果として開始される Ajax ポストバックは考慮されません。

Ajax ポストバック (通常、データが Web サーバーからフェッチされているときに回転する円のような形で視覚的に表示されます) により、WaitUntilReady がテスト コードに制御を返した後、DOM が変更される可能性があります。Execution Delay > 500 を設定するとテストが機能する場合、アプリケーションが Ajax ポストバックを実行して DOM が変更されていることは間違いありません。

この特定の問題を解決するには、次の 2 つの方法が考えられます。1) WaitUntilReady() 呼び出しの直後に ActiveBrowser.WaitForAjax() 呼び出しを追加します。これにより、Web サーバーへのすべての Ajax 接続が閉じられるまでテストが待機します。2) WaitUntilReady の後に WaitForElement を追加します。例: ActiveBrowser.WaitForElement(new HtmlFindExpression("id=maindiv"), 30000, false); これにより、コードは、指定されたプロパティに一致する要素が存在するのを待ってから次に進みます。

これが役立つことを願っています。

Cody テスト スタジオ サポート オフィサー

于 2013-04-24T19:52:30.957 に答える