您目前已離線,請等候您的網際網路重新連線

修正: 有可用的更新,讓自訂控制項撰寫程式碼的 UI 測試延伸模型,在 Visual Studio 2010 SP1 中識別的

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:2696646
結論
更新適用於 Microsoft Visual Studio 2010 Service Pack 1 (SP1)。這個更新會新增新的延伸模型,當您錄製和播放自動化測試 Visual Studio 2010 SP1 中使用的編碼 UI 測試延伸模型需要啟用自訂的控制項識別碼。在套用此更新程式之後,實作新外掛程式的自訂控制項是簡單許多,也比之前更簡單。

新的延伸模型會加入下列類別:
  • UITechnologyElementProxy。如何使用這個新類別的範例,您可以變更QueryID方法。這個方法會列為一組在地圖上的使用者介面項目 (UIMap) 的條件。若要新增多個條件,或變更現有的條件,您可以使用這個新類別。這種情況可能是自動化的其他屬性。或者,這些條件可以用來將更多可用的階層架構資訊新增至現有的 UIMap 檔案。
  • UITechnologyManagerProxy。 若要註冊您的技術專案經理與 proxy 技術管理員,您可以使用這個新類別。

如需有關如何套用此更新之後,請使用這些新類別的詳細資訊,請參閱 〈 其他資訊 〉 一節中的案例。
其他相關資訊

分析藍本

案例 1

您嘗試以自訂的控制項使用測試的所有編碼 UI Test.內容的外觀很順利以外的一或兩個次要的故障,例如自訂的控制項的週框或GetHashCode方法的覆寫的變更。與先前的延伸模型,您可以撰寫的外掛程式來解決這個問題,並覆寫目標的方法。在此同時,您必須覆寫數個其他的方法,讓外掛程式的工作,但可能要花天固定不變。藉由使用新的延伸模型,您可以覆寫目標的方法,以進行相同的工作。

案例 2

您開發自訂的控制項,並確認撰寫 UI 測試不自動執行自訂控制項的動作。比方說,當撰寫 UI 測試協調唯一播放上一步]。藉由使用這些新的類別,您可以實作自訂控制項的搜尋屬性,以使用個九個簡單的步驟,請依照下列的編碼 UI 測試自動化其動作的延伸模型。

Microsoft 會提供程式設計範例僅供說明,不做任何明示或默示的保證。這包括但不限於適售性或適合某特定用途之默示擔保。本文假設您已相當熟悉使用的我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能。不過,它們不會變更這些範例以提供額外的功能或建構程序來滿足您特定需求。
  1. 將控制項的識別屬性,透過使用 AccessibleObject 型別,例如 [描述] 或 [說明] 屬性的屬性。同樣地,傳遞其他屬性值以分隔符號隔開的字串,在AccessibleObject屬性中,如下例所示:

    public override string Description{    get    {        return "<custom_property_value1>"+";"+"<custom_property_value2>";    }}

    附註這是只有一個方法,將額外的參數傳遞給在撰寫程式碼的 UI 測試。如果您有幾個屬性,必須公開,您也可以使用程式碼資料隱碼攻擊的方法來傳遞自訂屬性。其中一種方法就是使用 WCF 通道撰寫 UI 測試和實際的應用程式之間。通道可用來傳遞,才能識別控制機制,或使用自訂屬性執行基本的驗證控制項的屬性。將內容傳給另一種方法是使用 Windows 訊息。您可以決定在適當的方法,取決於您的需求。

  2. 指定在自訂的技術名稱 UITechnologyManagerProxy類別和相對應的核心技術經理名稱,以便撰寫 UI 測試擴充架構可以據此進行內部的 proxy 註冊。

    附註目前,第三方外掛? 式都不能使用相同的技術名稱為任何編碼 UI 測試核心技術名稱。此外,多個協力廠商外掛程式名稱不能衝突。雖然外掛程式已載入的擴充管理員,撰寫 UI 測試外掛程式管理員無法允許登錄的多個外掛? 式有重複的技術名稱。因此,自訂的控制項必須針對不同的技術名稱CustomTechnologyManager建構函式,例如註冊如下例所示:
    public CustomTechnologyManager()            : base("MSAA", "<custom_technology_name>")        {        }
  3. 覆寫的GetControlSupportLevel方法 UITechnologyManagerProxy類別。您可以從 [ windowHandle ] 屬性,如下例所示,以取得 AccessibleObject 型別。執行這項操作之後,它會變成很容易就能擷取自訂屬性。您必須先分別適當的支援層級從自訂外掛程式之後將進行驗證的自訂屬性值。
    internal enum OBJID : uint        {            WINDOW = 0x00000000,            SYSMENU = 0xFFFFFFFF,            TITLEBAR = 0xFFFFFFFE,            MENU = 0xFFFFFFFD,            CLIENT = 0xFFFFFFFC,            VSCROLL = 0xFFFFFFFB,            HSCROLL = 0xFFFFFFFA,            SIZEGRIP = 0xFFFFFFF9,            CARET = 0xFFFFFFF8,            CURSOR = 0xFFFFFFF7,            ALERT = 0xFFFFFFF6,            SOUND = 0xFFFFFFF5,        } internal static IAccessible AccessibleObjectFromWindow(IntPtr windowHandle)        {            Guid accessibleGuid = typeof(IAccessible).GUID;            IAccessible accessible = null;             if (AccessibleObjectFromWindow(windowHandle, (int)OBJID.WINDOW, ref accessibleGuid, ref accessible) != 0)            {                Trace.TraceError("AccessibleObjectFromWindow failed for window handle {0}", windowHandle);            }             return accessible;        }         [DllImport("oleacc.dll")]internal static extern int AccessibleObjectFromWindow(IntPtr hWnd, int dwObjectID, ref Guid riid, ref IAccessible pAcc); public override int GetControlSupportLevel(IntPtr windowHandle)        {            int supportLevel = base.GetControlSupportLevel(windowHandle);            if (supportLevel > 1)            {                IAccessible accessibleObject = this.AccessibleObjectFromWindow(windowHandle);                if (accessibleObject!=null && accessibleObject.accDescription.Contains("custom_property_value"))                {                    return (int)ControlSupport.ControlSpecificSupport;                }            }             return (int)ControlSupport.NoSupport;        }
  4. 將屬性新增到自訂中的QueryID方法 UITechnologyElementProxy類別。您可以新增其他條件進行篩選,或從QueryID方法中移除條件。請注意,一旦移除條件時,出現在 UIMap 中停止屬性條件。新增其他條件進行篩選之後,它會被列為.uitest 檔案中的 [產生的程式碼之屬性條件的其他標記如果執行任何動作的自訂控制項上,如下例所示:
    <PropertyCondition Name=" <Custom_property_name>">Custom_property_value</PropertyCondition>         public override IQueryElement QueryId        {            get             {                if (queryElement == null)                {                    queryElement = base.QueryId;                    if(string.Equals(this.ControlTypeName, ControlType.Button.ToString(), StringComparison.OrdinalIgnoreCase))                    {                        Utilities.UpdateQueryId(this, queryElement, new string[]                         {                            <Custom_property_name>                    });                    }                }                return queryElement;            }        }


    以下是如何實作的Utilities.UpdateQueryId方法的範例。使用這個方法會在先前的範例。
    internal static void UpdateQueryId(UITechnologyElement element, IQueryElement queryElement, string[] inclusionProperties)        {            List<IQueryCondition> conditionList = new List<IQueryCondition>(queryElement.Condition.Conditions);            if (conditionList != null)            {                bool updated = false;                foreach (string propertyToInclude in inclusionProperties)                {                    bool exists = false;                    foreach (IQueryCondition qCond in conditionList)                    {                        PropertyCondition pCond = qCond as PropertyCondition;                        if (pCond != null &&                            string.Equals(pCond.PropertyName, propertyToInclude, StringComparison.OrdinalIgnoreCase))                        {                            exists = true;                            break;                        }                    }                     if (!exists)                    {                        string propVal = element.GetPropertyValue(propertyToInclude) as string;                        PropertyCondition newCondition = new PropertyCondition(propertyToInclude, propVal);                        conditionList.Add(newCondition);                        updated = true;                    }                }                 if (updated)                {                    queryElement.Condition.Conditions = conditionList.ToArray();                }            }        }
  5. 覆寫的GetPropertyValue方法 UITechnologyElementProxy類別,並接著將值設定為描述字串中的第一個語彙基元。這項實作會根據您將自訂屬性的傳遞而異。如果您使用程式碼資料隱碼將屬性,您應該建立通道,並接著擷取屬性,從主應用程式,如下例所示:
    public override object GetPropertyValue(string propertyName){    if (string.Equals(propertyName, “<custom_property_name>”))    {        string accDesc = this.GetPropertyValue(<custom_property_name>) as string;        if (accDesc != null)        {            string[] descriptionTokens = accDesc.Split(new char[] { ';' });            return descriptionTokens[0];        }    }    return base.GetPropertyValue(propertyName);}
  6. 指定在自訂技術管理員 UITechnologyElementProxy類別,並接著將其關聯的核心 IUI 技術的項目,如下例所示:
    public RadGridViewTechnologyElement(CustomTechnologyManager technologyManager, IUITechnologyElement coreElement)            : base(technologyManager, coreElement)        {        }
  7. 如果您有自訂程式碼產生的特製化的類別和步驟 4 中所述,您已在QueryID方法中新增額外的屬性條件,您必須將自訂屬性公開為有效的搜尋屬性,請在這個項目,如下例所示:
    protected override Dictionary<string, bool> GetValidSearchProperties(){    Dictionary<string, bool> validSearchProperties = base.GetValidSearchProperties();    if (!validSearchProperties.ContainsKey(<custom_property_name>))    {        validSearchProperties.Add((<custom_property_name>, true);    }     return validSearchProperties;}
  8. PropertyProvider的副檔名新增條件,以設定控制項的支援層級,如下例所示。

    附註UiTestControl方法的內容擷取時,我們建議您使用僅可用於 [ SearchProperties ] 屬性,或在uiTestControl方法的FilterProperties屬性中的屬性。不要嘗試擷取任何其他的屬性,因為即時控制項可能無法使用程式碼產生期間。
    public override int GetControlSupportLevel(UITestControl uiTestControl)        {            if (IsSupported(uiTestControl))            {                return (int)ControlSupport.ControlSpecificSupport;            }             return (int)ControlSupport.NoSupport;        } private static bool IsSupported(UITestControl uiTestControl)        {            string accDescriptionValue = string.Empty;            string objectType = string.Empty;             if (uiTestControl.SearchProperties != null && uiTestControl.SearchProperties.Count > 0)            {                PropertyExpression controlTypeExpression = uiTestControl.SearchProperties.Find(“<Custom_property_name>”);                if (controlTypeExpression != null)                {                    accDescriptionValue = controlTypeExpression.PropertyValue;                    string[] descriptionTokens = accDescriptionValue.Split(new char[] { ';' });                    objectType = descriptionTokens[0];                }            }             if (string.Equals(uiTestControl.TechnologyName, “<Custom_technology_name>”, StringComparison.OrdinalIgnoreCase)                 && (objectType.Contains(“<Custom_property_value>”)))                         {                 return true;            }            return false;        }
  9. 實作UITestExtensionPackage方法,並再附加 「 PropertyProvider 」 和 「 TechnologyManager 服務,藉由覆寫的GetService方法,如下例所示:
    public override object GetService(Type serviceType){    Trace.WriteLine("RadGridViewExtensionPackage.GetService(" + serviceType.ToString() + ")");    if (serviceType == typeof(UITestPropertyProvider))        return this.PropertyProvider;    else if (serviceType == typeof(UITechnologyManager))        return this.TechnologyManager;    return null;}

更新資訊

使用 Microsoft 的支援的 hotfix。然而,其目的只為修正問題,這份文件中所述。此 hotfix 只適用於發生本文所述之問題的系統上。此 hotfix 可能會接受其他測試。因此,如果您不會嚴重受到這個問題,我們建議您等候下一個包含此 hotfix 的軟體更新。

如果此 hotfix 已開放下載,則 「 下載 Hotfix 」 區段中,在此知識庫文件的頂端。如果沒有出現這一節,請連絡 Microsoft 客戶服務及支援 」 取得 hotfix。

附註如果發生其他問題,或者需要進行疑難排解時,您可能必須建立個別的服務要求。收取支援費用會套用到其他支援問題,以及此特定 hotfix 無法解決的問題。若要建立個別的服務要求或 Microsoft 客戶服務和支援的電話號碼的完整清單,請前往下列 Microsoft 網站: 附註「 下載 Hotfix 」 表單會顯示 hotfix 還是可以使用的語言。如果看不到您的語言,這是因為 hotfix 未提供該語言的支援。

必要條件

若要套用此 hotfix 之後,您必須擁有 Service Pack 1 (SP1) 套用至下列其中一項:
  • Microsoft Visual Studio 2010年高級
  • Microsoft Visual Studio 2010年精簡化的極致
  • Microsoft Visual Studio 2010年測試人員
  • Microsoft Visual Studio Team Foundation Server 2010
  • Microsoft Visual Studio 測試代理程式 2010

如需有關如何取得 Visual Studio 2010 SP1 的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
983509 Visual Studio 2010 Service Pack 1 的描述

重新啟動資訊

您可能必須套用此 hotfix 之後,重新啟動電腦。我們建議您在套用此 hotfix 之前,結束任何執行個體的 Visual Studio。

其他注意事項

此 hotfix 不會取代先前發行的 hotfix。

檔案資訊

此 hotfix 安裝檔案具有下列表格中所列的屬性。的日期和時間這些檔案會列在國際標準時間 (UTC)。的日期和時間在您的本機電腦上這些檔案會以您當地的時間加上目前的日光節約時間 (DST) 的時差來顯示。此外,日期和時間可能會變更當您執行特定作業時的檔案。
檔名檔案版本檔案大小日期時間平台
Leviewer.exe10.0.40219.396118,3442012-4 月 28-18: 41x86
Microsoft.teamfoundation.build.client.dll10.0.40219.396436,3522012-4 月 27-7: 59x86
Microsoft.teamfoundation.build.controls.dll10.0.40219.3961,365,1282012-4 月 28-18: 41x86
Microsoft.teamfoundation.client.dll10.0.40219.3961,595,5122012-4 月 27-7: 59x86
Microsoft.teamfoundation.common.dll10.0.40219.396525,4322012-4 月 27-7: 59x86
Microsoft.teamfoundation.common.library.dll10.0.40219.396334,9842012-4 月 27-7: 59x86
Microsoft.teamfoundation.controls.dll10.0.40219.396938,6162012-4 月 28-18: 41x86
Microsoft.teamfoundation.dll10.0.40219.396675,4322012-4 月 27-7: 59x86
Microsoft.teamfoundation.lab.activities.dll10.0.40219.396772,7442012-4 月 28-18: 41x86
Microsoft.teamfoundation.lab.client.dll10.0.40219.396153,2162012-4 月 27-7: 59x86
Microsoft.teamfoundation.lab.uiutils.dll10.0.40219.396266,8802012-4 月 28-18: 41x86
Microsoft.teamfoundation.lab.workflow.activities.dll10.0.40219.396440,4722012-4 月 28-18: 41x86
Microsoft.teamfoundation.officeintegration.common.dll10.0.40219.396375,9682012-4 月 28-18: 41x86
Microsoft.teamfoundation.officeintegration.project.dll10.0.40219.396517,2802012-4 月 28-18: 41x86
Microsoft.teamfoundation.sync.mapping.dll10.0.40219.39672,3202012-4 月 28-18: 41x86
Microsoft.teamfoundation.sync.provisioning.dll10.0.40219.396194,1922012-4 月 28-18: 41x86
Microsoft.teamfoundation.testmanagement.activities.common.dll10.0.40219.396315,0562012-4 月 28-18: 41x86
Microsoft.teamfoundation.testmanagement.activities.dll10.0.40219.3961,512,0962012-4 月 28-18: 41x86
Microsoft.teamfoundation.testmanagement.activityruntime.dll10.0.40219.396219,8162012-4 月 28-18: 41x86
Microsoft.teamfoundation.testmanagement.client.dll10.0.40219.396685,2082012-4 月 27-7: 59x86
Microsoft.teamfoundation.testmanagement.client.themes.dll10.0.40219.3963,059,3682012-4 月 28-18: 41x86
Microsoft.teamfoundation.testmanagement.client.wpfcontrols.dll10.0.40219.396257,7122012-4 月 28-18: 41x86
Microsoft.teamfoundation.testmanagement.clientpackage.dll10.0.40219.39673,8962012-4 月 28-18: 41x86
Microsoft.teamfoundation.testmanagement.common.dll10.0.40219.39634,4562012-4 月 27-7: 59x86
Microsoft.teamfoundation.testmanagement.controller.dll10.0.40219.396120,9922012-4 月 28-18: 41x86
Microsoft.teamfoundation.testmanagement.controls.dll10.0.40219.396496,2802012-4 月 28-18: 41x86
Microsoft.teamfoundation.testmanagement.controls.wpfworkitemcontrols.dll10.0.40219.396100,0402012-4 月 28-18: 41x86
Microsoft.teamfoundation.versioncontrol.client.dll10.0.40219.396706,2002012-4 月 27-7: 59x86
Microsoft.teamfoundation.versioncontrol.common.dll10.0.40219.396233,1122012-4 月 27-7: 59x86
Microsoft.teamfoundation.versioncontrol.controls.dll10.0.40219.3964,439,1922012-4 月 28-18: 41x86
Microsoft.teamfoundation.workitemtracking.client.dll10.0.40219.396699,0322012-4 月 27-7: 59x86
Microsoft.teamfoundation.workitemtracking.controls.dll10.0.40219.3961,215,1362012-4 月 28-18: 41x86
Microsoft.teamfoundation.workitemtracking.proxy.dll10.0.40219.396390,8082012-4 月 27-7: 59x86
Microsoft.visualstudio.qualitytools.agentobject.dll10.0.40219.396106,6482012-4 月 28-18: 41x86
Microsoft.visualstudio.qualitytools.common.dll10.0.40219.3961,355,4082012-4 月 28-18: 41x86
Microsoft.visualstudio.qualitytools.controllerobject.dll10.0.40219.396276,1282012-4 月 28-18: 41x86
Microsoft.visualstudio.qualitytools.datacollectionagentobject.dll10.0.40219.39637,0482012-4 月 28-18: 41x86
Microsoft.visualstudio.qualitytools.executioncommon.dll10.0.40219.396481,4402012-4 月 28-18: 41x86
Microsoft.visualstudio.qualitytools.resource.dll10.0.40219.396966,8002012-4 月 28-18: 41x86
Microsoft.visualstudio.qualitytools.testcasemanagement.dll10.0.40219.3961,280,1682012-4 月 28-18: 41x86
Microsoft.visualstudio.qualitytools.tmi.dll10.0.40219.396398,4722012-4 月 28-18: 41x86
Microsoft.visualstudio.teamfoundation.build.dll10.0.40219.396142,4802012-4 月 28-18: 41x86
Microsoft.visualstudio.teamfoundation.dll10.0.40219.39693,8242012-4 月 28-18: 41x86
Microsoft.visualstudio.teamfoundation.teamexplorer.dll10.0.40219.396799,9042012-4 月 28-18: 41x86
Microsoft.visualstudio.teamfoundation.versioncontrol.dll10.0.40219.39659,0482012-4 月 28-18: 41x86
Microsoft.visualstudio.teamfoundation.versioncontrol.dll10.0.40219.39659,5602012-4 月 28-18: 41x86
Microsoft.visualstudio.teamfoundation.versioncontrol.dll10.0.40219.39661,0962012-4 月 28-18: 41x86
Microsoft.visualstudio.teamfoundation.versioncontrol.dll10.0.40219.39663,6562012-4 月 28-18: 41x86
Microsoft.visualstudio.teamfoundation.versioncontrol.dll10.0.40219.396942,2402012-4 月 28-18: 41x86
Microsoft.visualstudio.teamfoundation.workitemtracking.dll10.0.40219.396460,9682012-4 月 28-18: 41x86
Microsoft.visualstudio.teamsystem.integration.dll10.0.40219.396193,1762012-4 月 28-18: 41x86
Microsoft.visualstudio.testtools.manualtest.common.dll10.0.40219.396813,2162012-4 月 28-18: 41x86
Microsoft.visualstudio.testtools.uitest.codegeneration.dll10.0.40219.396155,3042012-4 月 28-18: 41x86
Microsoft.visualstudio.testtools.uitest.extension.dll10.0.40219.396193,6962012-4 月 28-18: 41x86
Microsoft.visualstudio.testtools.uitest.extension.ie.dll10.0.40219.396252,0642012-4 月 28-18: 41x86
Microsoft.visualstudio.testtools.uitest.extension.msaa.dll10.0.40219.396115,3682012-4 月 28-18: 41x86
Microsoft.visualstudio.testtools.uitest.extension.uia.dll10.0.40219.396107,1762012-4 月 28-18: 41x86
Microsoft.visualstudio.testtools.uitest.framework.dll10.0.40219.39658,0162012-4 月 28-18: 41x86
Microsoft.visualstudio.testtools.uitest.playback.dll10.0.40219.39666,2002012-4 月 28-18: 41x86
Microsoft.visualstudio.testtools.uitest.recorder.dll10.0.40219.396230,0402012-4 月 28-18: 41x86
Microsoft.visualstudio.testtools.uitesting.dll10.0.40219.396339,6002012-4 月 28-18: 41x86
Msdiff.dll10.0.40219.396485,4482012-4 月 28-18: 41x86
Mtm.exe10.0.40219.396449,0882012-4 月 28-18: 41x86
Qtagent.exe10.0.40219.39621,0642012-4 月 28-18: 41x86
Qtagent.exe10.0.40219.39621,0722012-4 月 28-18: 41x86
Qtagent32.exe10.0.40219.39621,0642012-4 月 28-18: 41x86
Qtagent32.exe10.0.40219.39621,0722012-4 月 28-18: 41x86
Qtagentservice.exe10.0.40219.39699,9282012-4 月 28-18: 41x86
Rpfplayback.dll10.0.40219.396482,4722012-4 月 28-18: 41x86
Tf.exe10.0.40219.396325,6962012-4 月 28-18: 41x86


参考
如需有關軟體更新術語的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
編號 824684 用來描述 Microsoft 軟體更新標準術語的說明

警告:本文為自動翻譯

內容

文章識別碼:2696646 - 最後檢閱時間:05/23/2012 16:49:00 - 修訂: 1.0

Microsoft Visual Studio 2010 Service Pack 1

  • kbautohotfix kbqfe kbhotfixserver kbfix kbbug kbexpertiseinter kbsurveynew kbmt KB2696646 KbMtzh
意見反應