3

VS2010 で CUIT を使用していくつかのテスト ケースを記録しました。前日はすべて正常に機能しました。そのため、今日もう一度実行すると、すべてのテストが失敗し、次の警告が表示されました: The following element is no longer available ... and I got the exception : Can't perform "Click" on the hidden control, which is not true because allコントロールは非表示になりません。他のマシンで試してみましたが、同様に失敗しました。

なぜそれが起こるのか誰か知っていますか?他の何かのための Web アプリケーションのためですか? 助けてください、ありがとう。

PS: それで、「隠されたコントロール」と言ったのと同じコントロールで新しいテストを記録しようとしましたが、新しいテストはうまくいきました!? 理由がわかりません。

編集

記録中に要素またはコントロールをキャプチャしようとすると、「The following element blah blah ...」という警告が表示されます。ボタンのソースコードは「非表示」と言われています

public HtmlImage UIAbmeldenImage
    {
        get
        {
            if ((this.mUIAbmeldenImage == null))
            {
                this.mUIAbmeldenImage = new HtmlImage(this);
                #region Search Criteria
                this.mUIAbmeldenImage.SearchProperties[HtmlImage.PropertyNames.Id] = null;
                this.mUIAbmeldenImage.SearchProperties[HtmlImage.PropertyNames.Name] = null;
                this.mUIAbmeldenImage.SearchProperties[HtmlImage.PropertyNames.Alt] = "abmelden";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.AbsolutePath] = "/webakte-vnext/content/apps/Ordner/images/logOut.png";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.Src] = "http://localhost/webakte-vnext/content/apps/Ordner/images/logOut.png";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.LinkAbsolutePath] = "/webakte-vnext/e.consult.9999/webakte/logout/index";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.Href] = "http://localhost/webakte-vnext/e.consult.9999/webakte/logout/index";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.Class] = null;
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.ControlDefinition] = "alt=\"abmelden\" src=\"http://localhost/web";
                this.mUIAbmeldenImage.FilterProperties[HtmlImage.PropertyNames.TagInstance] = "1";
                this.mUIAbmeldenImage.WindowTitles.Add("Akte - Test Akte Coded UI VS2010");
                #endregion
            }
            return this.mUIAbmeldenImage;
        }
    }
4

7 に答える 7

3

問題を回避するための公式リンク:

http://blogs.msdn.com/b/visualstudioalm/archive/2013/09/17/coded-ui-mtm-issues-on-internet-explorer-with-kb2870699.aspx

于 2013-09-18T08:34:00.977 に答える
0

VS 2012 でも同じ問題が発生しました。回避策として、そのステップを削除して、もう一度記録し直すことができます。それは通常うまくいきます。

于 2013-11-20T10:02:59.787 に答える
0

コード化された UI テストの失敗を分析する際の最大の問題の 1 つは、エラー スタック トレースが、失敗の実際の原因とはまったく関係のないコード行を示していることです。

テストで HTML ロギングを有効にすることをお勧めします。これにより、コード化された UI がテストを実行しようとした方法の詳細が、アプリケーションのスクリーンショットとともに段階的に表示されます。また、コード化された UI が検索/操作しようとしているコントロールを赤色で強調表示します。これは、テストの失敗の実際の原因をトラブルシューティングするのに非常に役立ちます。

トレースを有効にするには、以下のコードを app.config ファイルに追加するだけです --

ここに画像の説明を入力

于 2016-07-08T13:15:07.843 に答える
0

Web サイトによって設定された値を持つ、またはデスクトップ上のある種のウィンドウ ID を表すフィールドがSearchProperties(または場合によっては) にある場合があります。FilterPropertiesもう 1 つの可能性は、Web ページのタイトルが日ごと、または訪問ごとに変わることです。ブラウザーのさまざまな実行または Web ページへのさまざまなアクセスによって、さまざまな値が作成されます。SearchPropertiesこれらの値を(または)から削除するFilterPropertiesか、タイトルのチェックを から に変更して、タイトルequalscontains定数部分を修正すると、問題が解決するはずです。コード化された UI は、必要な最小セットよりも多くの値を検索することがよくあります。

記録された 2 つのテストで、同じコントロールの検索プロパティなどを比較します。

コメントに記載されている追加の詳細に基づいて更新します。

同様の問題を次のように解決しました。あなたの質問に示されているものと同様のプロパティ コードを、 を呼び出すメソッドにコピーしましたFindMatchingControls。返されたコントロールの数 (私の場合は最大 3 つ) を確認しました。デバッグ ファイルに大量のテキストを書き込んで、見つかったコントロールのさまざまなプロパティを調べました。私の場合、プロパティLeftTopプロパティは、不要な、つまり非表示のコントロールに対して負であることがわかりました。

プロパティを使用するだけでなく、コードでUIAbmeldenImage以下のメソッドを呼び出すこともできます。のように表現を変更します。

HtmlImage im = UIMap.abc.def.UIAbmeldenImage;

することが

HtmlImage im = FindHtmlHyperLink(UIMap.abc.def);

メソッドは次のとおりです。

public HtmlImage FindHtmlHyperLink(HtmlDocument doc)
{
    HtmlImage myImage = new HtmlImage(doc);
    myImage.SearchProperties[HtmlImage.PropertyNames.Id] = null;
    myImage.SearchProperties[HtmlImage.PropertyNames.Name] = null;
    myImage.SearchProperties[HtmlImage.PropertyNames.Alt] = "abmelden";
    myImage.FilterProperties[HtmlImage.PropertyNames.AbsolutePath] = "/webakte-vnext/content/apps/Ordner/images/logOut.png";
    myImage.FilterProperties[HtmlImage.PropertyNames.Src] = "http://localhost/webakte-vnext/content/apps/Ordner/images/logOut.png";
    myImage.FilterProperties[HtmlImage.PropertyNames.LinkAbsolutePath] = "/webakte-vnext/e.consult.9999/webakte/logout/index";
    myImage.FilterProperties[HtmlImage.PropertyNames.Href] = "http://localhost/webakte-vnext/e.consult.9999/webakte/logout/index";
    myImage.FilterProperties[HtmlImage.PropertyNames.Class] = null;
    myImage.FilterProperties[HtmlImage.PropertyNames.ControlDefinition] = "alt=\"abmelden\" src=\"http://localhost/web";
    myImage.FilterProperties[HtmlImage.PropertyNames.TagInstance] = "1";
    myImage.WindowTitles.Add("Akte - Test Akte Coded UI VS2010");

    UITestControlCollection controls = myImage.FindMatchingControls();


    if (controls.Count > 1)
    {
        foreach (UITestControl con in controls)
        {
            if ( con.Left < 0 || con.Top < 0 )
            {
                // Not on display, ignore it.
            }
            else
            {
                // Select this one and break out of the loop.
                myImage = con as HtmlImage;
                break;
            }
        }
    }

    return myImage;
}

上記のコードはコンパイルまたはテストされていないことに注意してください。最終的なコードとしてではなく、アイデアとして解釈する必要があります。

于 2013-09-12T13:23:16.207 に答える