1

TestDriven.Net を使用して、VS2010 の MSpec で WatiN を動作させようとしています。私のコードは次のとおりです。

[Subject("Whatever")]
public class when_on_home_page {

    private static IE browser;

    Establish context = () =>
        browser = new IE();

    Because of = () => {
        browser.GoTo("http://localhost:1234/");
        browser.WaitForComplete();
    };

    It should_show_add_details_link = () =>
        browser.Link(Find.ByValue("Add Details")).Exists.ShouldBeTrue();
}

これを実行すると、ブラウザーはページをロードしますが、リンクをチェックすると、次のようになります。

何でも、ホームページにあるとき
»詳細の追加リンクを表示する必要があります(FAIL)

「詳細リンクの追加を表示する必要がある」というテストに失敗しました: System.UnauthorizedAccessException: アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED)) WatiN.Core.Native.InternetExplorer.IEElementCollection.GetElementsByTag(String tagName) の WatiN.Core.NativeElementFinder.FindElementsByTag(String tagName) の mshtml.IHTMLElementCollection.tags(Object tagName) で.Core.NativeElementFinder.d__2.MoveNext() at WatiN.Core.ElementFinder.FindFirst() at WatiN.Core.Element.FindNativeElementInternal() at WatiN.Core.Element.get_Exists() NavigationSpecs.cs(20,0): at RoboWeb.Specs.when_on_home_page.<.ctor>b__2() で Machine.Specifications.Model.Specification.InvokeSpecificationField() で Machine.Specifications.Model.Specification.Verify()

ざっと見たところ、以下の点を確認しました。

  • VS は管理者として実行されています
  • TestDriven.Net はすべてを STA モードで実行するようです。
  • IE の「保護モード」がオフになっている
  • おそらくローカルで実行されているため、サイトを信頼済みサイトに追加できません
  • WaitForComplete() を呼び出し、Thread.Sleep() も試しました

FireFoxでも試してみましたが、クラッシュするだけです。

ここで何が間違っているのか分かりますか?

4

2 に答える 2

2

これらの仕様は私にとってはうまくいきます。実際、私はこれが初めての WatiN 仕様です。あなたが受け取ったエラーを再現しようとして書きました。:-)

私がしなければならなかった唯一の特別なことは、IE の保護モードをオフにすることでした。仕様を実行しました

  • コマンド ラインで (リポジトリを参照WebSpecs-Watin.cmdしてください。cmd を実行する前に、specs プロジェクトをコンパイルし、VS から Web アプリケーションを実行してください)
  • TD.Net ランナーを使用
  • ReSharper で

それらは 3 つのケースすべてで成功します。私は管理者として実行していません。

上記のリンク先のプロジェクトでエラーを再現してみてください。Git がインストールされていない場合は、上部のセクションにダウンロード ボタンがあります。

于 2011-03-11T20:39:48.373 に答える
0

System.UnauthorizedAccessException は、さまざまな状況で発生する可能性があります。ページが完全に読み込まれておらず、オブジェクトにアクセスしようとした場合、および単に適切なユーザーではない場合。まず、スクリプトを手動でデバッグし、テスト ランナーを管理者として実行します。

それが機能する場合は、管理者と全速力、非管理者と全速力、および管理者とデバッグの組み合わせを試してください。次に、実際の問題が何であるかについて良い考えを持っている必要があります。いくつかのまれな状況 (WatiN の初期の初期バージョン) では、呼び出しを try - catch でラップしてから、この例外を処理し、少し待ってから再試行する必要がありました。

于 2011-03-12T00:34:19.617 に答える