2

私のC#コードではWatin、Webをナビゲートし、ページにログインするために使用しています。ログインボタンをクリックする必要がありますが、ログアウトしたい直後にログアウトボタンをクリックしますが、ログアウト部分が機能しません。ログイン後にブラウザを閉じる(closeメソッドを使用)ことも試みましたが、うまくいきませんでした。ページが変更されるとすぐに (つまり、ログイン後)、c# からのコマンドが機能しなくなります。

誰が何が悪いのか知っていますか?

4

4 に答える 4

1

別の回答で述べたように、 Thread.Sleep(milliseconds) は、何かがロードされるまで一定期間待機する方法です。実装は非常に簡単ですが、ロード時間が変動するため、最適とは言えません。また、常に十分に長く待機するように長くすると、多くの無駄な時間が発生します。1 つのテストでは、これは大したことではありませんが、たとえば、5 秒間待機する必要があり、1000 個のテストがある場合....などなど.

私が行ったルートは次のとおりです。

  1. Thread.Sleep()s に入れて、「待機」の問題かどうかを判断します。
  2. Sleep() を含むコードが複数回使用される場合は、sleep() が必要な原因を突き止めます。
  3. さまざまな Wait...() メソッドを使用して Sleep() をリファクタリングします。WaitTilExists、WaitForAttributeEqualsWhatever、WaitForAsyncToFinish <- 実際のメソッドではありませんが、WatiN には多数の組み込みメソッドがあります

私にとっての待機の大きな原因は、ASP.NET での JQuery 非同期呼び出しであり、非同期呼び出しが完了するまで待機するのに適した静的ヘルパー クラスを作成しました。これらは、テストしているサイトが記述されているフレームワークに非常に固有である傾向があります.

于 2013-02-04T15:22:16.317 に答える
0

watin clickコマンドは、ブラウザがロードされるまで待機するため、実際にはポストバックを待機します。ClickNoWait()コマンドを使用する場合、待機しません。したがって、コードが次のようになっている場合は、次のように機能するはずです。

browser.GoTo("www.your-site.com");
// fill user/pass
browser.Button(Find.ByClass("login-class")).Click();
browser.Button(Find.ByClass("logout-class")).Click();

それでも機能しない場合は、ログイン後にこれを追加できます。browser.WaitForComplete();をクリックします。

于 2013-02-03T13:48:38.067 に答える
0

Watin では、コードがブロックされていない (コード行を実行し、すぐに続行する) 多くの状況に遭遇するため、そのような場合には、次のページ (アクション、など) はすでに存在します。たとえば、ログイン ページで、そのページに UserName というテキスト ボックスがあるかどうかを確認できます。

<code>      
    TextField uName = browser.TextField(Find.ByName("userName"));    
    if(uName.Exists)
    {
         // Then do the login code....
    }
</code>

同様に、コードの実行を続ける前に、ログイン後のページがそこにあることを制御する必要があります。たとえば、「アカウントの詳細」というテキストが含まれていることがわかっているページにログインしている場合は、次のようにします。

<code>
    browser.GoTo("http://www.yourdomain.com/login.aspx");
    //do your login code

    browser.WaitUntilContainsText("Your Account Details", 240); // the second parameter indicates the seconds it will wait before it times out.

    // your code to deal with the page after the login.  
</code>

Thread.Sleep の使用は混乱のレシピであり、それは確かに問題です。Web ページで適切なタイミングを取得することは決してありません (10 秒かかると思っても、決して戻ってこない可能性があり、その時点でサーバーは開いている接続を終了します)。

それが役に立てば幸い。

于 2014-10-30T20:01:41.777 に答える
-1

スクリプトでThread.sleepを使用して、ログアウトおよびログインと同期します...または、ログアウトする代わりに、アプリケーションを直接閉じて、インスタンスを使用してアプリケーションに再ログインします。

于 2013-02-04T14:17:12.123 に答える