Sdílet prostřednictvím


Povolit kódované testování ovládacích prvků uživatelského rozhraní

Váš ovládací prvek lze snadněji testovat, je-li implementovat podporu pro kódované testování rámec uživatelského rozhraní.Postupně můžete přidat zvýšení úrovně podpory.Můžete spustit tak, že podpora ověření záznamu a přehrávání a vlastnosti.Rozvíjet, chcete-li povolit kódované Tvůrce testu UI rozpoznávat vlastní vlastnosti ovládacího prvku a poskytují vlastní třídy pro přístup k těmto vlastnostem z generovaného kódu.Může také pomoci kódované UI test Tvůrce zachycení akce tak, že se blíží záměr akce zaznamenávány.

V tomto tématu:

  1. Podpora záznamu a přehrávání a vlastnosti ověření implementací usnadnění

  2. Podpora vlastní vlastnost ověření implementací vlastnosti zprostředkovatele

  3. Podpora generování kódu pomocí implementace třídy pro přístup k vlastní vlastnosti

  4. Podporovat opatření podporující záměr implementací akce filtru

CUIT_Full

Podpora záznamu a přehrávání a vlastnosti ověření implementací usnadnění

Kódované Tvůrce testu UI shromažďuje informace o ovládacích prvcích, že dojde během nahrávání a potom generuje kód hry relace.Pokud váš ovládací prvek nepodporuje usnadnění, zachytí kódované Tvůrce testu UI akcí (stejně jako klepnutí myší) pomocí obrazovkových souřadnicích.Při zkoušce přehrávání, vydá generovaný kód těchto myší ve stejném obrazovkových souřadnicích.Pokud váš ovládací prvek se zobrazí na jiné místo na obrazovce při přehrávání zkoušky, generovaný kód nebude možné tuto akci provést u ovládacího prvku.To může způsobit selhání Pokud test přehrávání na různých obrazovky konfigurace, v různých prostředích nebo poté, co byly provedeny změny rozložení uživatelského rozhraní.

CUIT_RecordNoSupport

Pokud implementujete usnadnění, však kódované Tvůrce testu UI bude pomocí k zachycení informace o ovládání zaznamenává test a generuje kód.Potom při spuštění testu generovaný kód bude přehrát tyto události proti váš ovládací prvek i v případě, že je někde jinde v uživatelském rozhraní.Autoři testu bude také možné vytvořit nepodmíněných výrazů pomocí základních vlastností ovládacího prvku.

CUIT_Record

Hh552522.collapse_all(cs-cz,VS.110).gifPro podporu nahrávání a přehrávání, ověření vlastností a navigace pro Windows formuláře ovládací prvek

Implementaci usnadnění přístupu pro ovládací prvek, jak je uvedeno v následující proceduře a podrobně vysvětleny v AccessibleObject.

CUIT_Accessible

  1. Implementovat třídu, která je odvozena z Control.ControlAccessibleObjecta přepsat AccessibilityObject vlastnost vrací objekt vaší třídy.

    public partial class ChartControl : UserControl
    {
        // Overridden to return the custom AccessibleObject for the control.
        protected override AccessibleObject CreateAccessibilityInstance()
        {
            return new ChartControlAccessibleObject(this);
        }
    
        // Inner class ChartControlAccessibleObject represents accessible information
        // associated with the ChartControl and is used when recording tests.
        public class ChartControlAccessibleObject : ControlAccessibleObject
        {
            ChartControl myControl;
            public ChartControlAccessibleObject(ChartControl ctrl)
                : base(ctrl)
            {
                myControl = ctrl;
            }
        }
    }
    
  2. Přepsat přístupný objekt Role, State, GetChild a GetChildCount vlastnosti a metody.

  3. Provádět jiný objekt usnadnění s podřízeným ovládacím prvkem a přepsat podřízený ovládací prvek AccessibilityObject vlastnost, kterou chcete vrátit tento objekt usnadnění přístupu.

  4. Přepsat Bounds, Name, Parent, Role, State, Navigate, a Select vlastnosti a metody pro objekt usnadnění podřízeného ovládacího prvku.

[!POZNÁMKA]

Toto téma začíná vzorku usnadnění přístupu v AccessibleObject v tomto postupu a potom sestavení, na které v zbývající postupy.Pokud chcete vytvořit pracovní verzi usnadnění vzorku, vytvoření aplikace konzoly a pak nahraďte kód ve Program.cs ukázkový kód.Budete muset přidat odkazy na usnadnění System.Drawing a System.Windows.Forms.Měli byste změnit Embed Interop Types pro usnadnění přístupu na hodnotu False pro odstranění upozornění sestavení.Chcete-li změnit typ výstupu projektu chcete-li z aplikace konzoly systému Windows tak, aby okna konzoly nezobrazí při spuštění aplikace.

Podpora vlastní vlastnost ověření implementací vlastnosti zprostředkovatele

Po provádění základní podpora pro záznam a přehrávání a vlastnosti ověření můžete zpřístupnit vlastní vlastnosti ovládacího prvku zkouškám kódované UI implementací UITestPropertyProvider modulu plug-in.Například následující procedura vytvoří vlastnost zprostředkovatele, který umožňuje kódované testy uživatelského rozhraní pro přístup k vlastnosti stavu ovládacího prvku Graf CurveLegend podřízených ovládacích prvků.

CUIT_CustomProps

Hh552522.collapse_all(cs-cz,VS.110).gifPro podporu ověřování vlastních vlastností

CUIT_Props

  1. Přepsat křivky legendy přístupné objektu Description vlastnost k předání hodnot ve formátu RTF vlastnost v řetězci popisu odděleny od hlavní popis (a sebe) Pokud implementujete více vlastností středníky (;).

    public class CurveLegendAccessibleObject : AccessibleObject
    {
        // add the state property value to the description
        public override string Description
        {
            get
            {
                // Add “;” and the state value to the end
                // of the curve legend’s description
                return "CurveLegend; " + State.ToString();
            }
        }
    }
    
  2. Vytvořte balíček rozšíření testovací uživatelské rozhraní pro ovládací prvek vytvořením projektu knihovny tříd a přidávat odkazy na usnadnění přístupu, Microsoft.VisualStudio.TestTools.UITesting, Microsoft.VisualStudio.TestTools.UITest.Common a Microsoft.VisualStudio.TestTools.Extension.Změna vkládají interoperabilní typy pro usnadnění přístupu na hodnotu False.

  3. Přidat vlastnost třída zprostředkovatele, který je odvozen z UITestPropertyProvider.

    using System;
    using System.Collections.Generic;
    using Accessibility;
    using Microsoft.VisualStudio.TestTools.UITesting;
    using Microsoft.VisualStudio.TestTools.UITest.Extension;
    using Microsoft.VisualStudio.TestTools.UITesting.WinControls;
    using Microsoft.VisualStudio.TestTools.UITest.Common;
    
    namespace ChartControlExtensionPackage
    {
        public class ChartControlPropertyProvider : UITestPropertyProvider
        {
        }
    }
    
  4. Implementovat vlastnost poskytovatele tím, že názvy vlastností a vlastnost popisovače v Dictionary<TKey, TValue>.

    // Define a map of property descriptors for CurveLegend
    private static Dictionary<string, UITestPropertyDescriptor> curveLegendPropertiesMap = null;
    private static Dictionary<string, UITestPropertyDescriptor> CurveLegendPropertiesMap
    {
        get
        {
            if (curveLegendPropertiesMap == null)
            {
                UITestPropertyAttributes read =
                    UITestPropertyAttributes.Readable |
                    UITestPropertyAttributes.DoNotGenerateProperties;
                curveLegendPropertiesMap =
                    new Dictionary<string, UITestPropertyDescriptor>
                        (StringComparer.OrdinalIgnoreCase);
                curveLegendPropertiesMap.Add("State",
                    new UITestPropertyDescriptor(typeof(string), read));
            }
            return curveLegendPropertiesMap;
        }
    }
    
    // return the property descriptor
    public override UITestPropertyDescriptor GetPropertyDescriptor(UITestControl uiTestControl, string propertyName)
    {
        return CurveLegendPropertiesMap[propertyName];
    }
    
    // return the property names
    public override ICollection<string> GetPropertyNames(UITestControl uiTestControl)
    {
        if (uiTestControl.ControlType.NameEquals("Chart") || uiTestControl.ControlType.NameEquals("Text"))
        {
            // the keys of the property map are the collection of property names
            return CurveLegendPropertiesMap.Keys;
        }
    
        // this is not my control
        throw new NotSupportedException();
    }
    
    // Get the property value by parsing the accessible description
    public override object GetPropertyValue(UITestControl uiTestControl, string propertyName)
    {
        if (String.Equals(propertyName, "State", StringComparison.OrdinalIgnoreCase))
        {
            object[] native = uiTestControl.NativeElement as object[];
            IAccessible acc = native[0] as IAccessible;
    
            string[] descriptionTokens = acc.accDescription.Split(new char[] { ';' });
            return descriptionTokens[1];
        }
    
        // this is not my control
        throw new NotSupportedException();
    }
    
  5. Přepsat UITestPropertyProvider.GetControlSupportLevel k označení, zda vaše sestavení podporuje specifické pro ovládací prvek pro ovládací prvek a jeho podřízené.

    public override int GetControlSupportLevel(UITestControl uiTestControl)
    {
        // For MSAA, check the control type
        if (string.Equals(uiTestControl.TechnologyName, "MSAA",
            StringComparison.OrdinalIgnoreCase) &&
            (uiTestControl.ControlType == "Chart"||uiTestControl.ControlType == "Text"))
        {
            return (int)ControlSupport.ControlSpecificSupport;
        }
    
        // This is not my control, so return NoSupport
        return (int)ControlSupport.NoSupport;
    }
    
  6. Přepsat zbývající abstraktní metody Microsoft.VisualStudio.TestTools.UITesting.UITestPropertyProvider.

    public override string[] GetPredefinedSearchProperties(Type specializedClass)
    {
        throw new NotImplementedException();
    }
    
    public override Type GetSpecializedClass(UITestControl uiTestControl)
    {
        throw new NotImplementedException();
    }
    
    public override Type GetPropertyNamesClassType(UITestControl uiTestControl)
    {
        throw new NotImplementedException();
    }
    
    public override void SetPropertyValue(UITestControl uiTestControl, string propertyName, object value)
    {
        throw new NotImplementedException();
    }
    
    public override string GetPropertyForAction(UITestControl uiTestControl, UITestAction action)
    {
        throw new NotImplementedException();
    }
    
    public override string[] GetPropertyForControlState(UITestControl uiTestControl, ControlStates uiState, out bool[] stateValues)
    {
        throw new NotImplementedException();
    }
    
    
    
    
    
  7. Přidat třídy balíček rozšíření, která je odvozena z UITestExtensionPackage.

    using System;
    using Microsoft.VisualStudio.TestTools.UITesting;
    using Microsoft.VisualStudio.TestTools.UITest.Extension;
    using Microsoft.VisualStudio.TestTools.UITest.Common;
    
    namespace ChartControlExtensionPackage
    {
        internal class ChartControlExtensionPackage : UITestExtensionPackage
        {
        }
    }
    
  8. Definovat UITestExtensionPackage atribut pro sestavení.

    [assembly: Microsoft.VisualStudio.TestTools.UITest.Extension.UITestExtensionPackage(
                    "ChartControlExtensionPackage",
                    typeof(ChartControlExtensionPackage.ChartControlExtensionPackage))]
    namespace ChartControlExtensionPackage
    {
       …
    
  9. Ve třídě balíček rozšíření přepsat UITestExtensionPackage.GetService -li požadované vlastnosti zprostředkovatele třídu vlastnictví poskytovatele.

    internal class ChartControlExtensionPackage : UITestExtensionPackage
    {
        public override object GetService(Type serviceType)
        {
            if (serviceType == typeof(UITestPropertyProvider))
            {
                if (propertyProvider == null)
                {
                    propertyProvider = new ChartControlPropertyProvider();
                }
                return propertyProvider;
            }
            return null;
        }
    
        private UITestPropertyProvider propertyProvider = null;
    }
    
  10. Přepsat zbývající abstraktní metody a vlastnosti UITestExtensionPackage.

    public override void Dispose() { }
    
    public override string PackageDescription
    {
        get { return "Supports coded UI testing of ChartControl"; }
    }
    
    public override string PackageName
    {
        get { return "ChartControl Test Extension"; }
    }
    
    public override string PackageVendor
    {
        get { return "Microsoft (sample)"; }
    }
    
    public override Version PackageVersion
    {
        get { return new Version(1, 0); }
    }
    
    public override Version VSVersion
    {
        get { return new Version(10, 0); }
    }
    
  11. Sestavit vaše binární soubory a zkopírujte je do % ProgramFiles %\Common\Microsoft Shared\VSTT\10.0\UITestExtensionPackages.

[!POZNÁMKA]

Tento balíček rozšíření budou použity u libovolného ovládacího prvku, který je typu "Text".Pokud provádíte testování více ovládacích prvků stejného typu, budete muset zkouší odděleně a spravovat balíčky rozšíření, které jsou nasazeny při záznamu zkoušky.

Podpora generování kódu pomocí implementace třídy pro přístup k vlastní vlastnosti

Kódované Tvůrce testu UI generuje kód z relace nahrávání, použije UITestControl třídu pro přístup ovládacích prvků.

UITestControl uIAText = this.UIItemWindow.UIChartControlWindow.UIAText;
Assert.AreEqual(this.AssertMethod3ExpectedValues.UIATextState, uIAText.GetProperty("State").ToString());

Jste-li vlastnost zprostředkovatel přístupu k vlastní vlastnosti ovládacího prvku, můžete přidat specializované třídy, která se používá pro přístup k těmto vlastnostem, tak, aby generovaný kód zjednodušen.

ControlLegend uIAText = this.UIItemWindow.UIChartControlWindow.UIAText;
Assert.AreEqual(this.AssertMethod3ExpectedValues.UIATextState, uIAText.State);

Hh552522.collapse_all(cs-cz,VS.110).gifChcete-li přidat specializované třídy pro přístup k ovládání

CUIT_CodeGen

  1. Implementovat třídu, která je odvozena z WinControl a přidat do kolekce vlastností vyhledávání v konstruktoru ovládacího prvku typu.

    public class CurveLegend:WinControl 
    {
       public CurveLegend(UITestControl c) : base(c) 
       {
          // The curve legend control is a “text” type of control
          SearchProperties.Add(
             UITestControl.PropertyNames.ControlType, "Text");
       }
    }
    
  2. Implementujte vlastní vlastnosti ovládacího prvku jako vlastnosti třídy.

    public virtual string State
    {
        get
        {
            return (string)GetProperty("State");
        }
    }
    
  3. Přepsat zprostředkovatel vlastností UITestPropertyProvider.GetSpecializedClass metoda vrátí typ novou třídu pro křivku legendy podřízených ovládacích prvků.

    public override Type GetSpecializedClass(UITestControl uiTestControl) 
    { 
       if (uiTestControl.ControlType.NameEquals("Text")) 
       { 
          // This is text type of control. For my control,
          // that means it’s a curve legend control.
          return typeof(CurveLegend); 
       } 
    
       // this is not a curve legend control
       return null;
    }
    
  4. Přepsat zprostředkovatel vlastností GetPropertyNamesClassType metoda vrátí typ PropertyNames metody nové třídy.

    public override Type GetPropertyNamesClassType(UITestControl uiTestControl)
    {
        if (uiTestControl.ControlType.NameEquals("Text"))
        {
          // This is text type of control. For my control,
          // that means it’s a curve legend control.
            return typeof(CurveLegend.PropertyNames);
        }
    
        // this is not a curve legend control
        return null;
    }
    

Podporovat opatření podporující záměr implementací akce filtru

V případě, že aplikace Visual Studio zaznamenává test, zachytí každé události myši a klávesnice.Nicméně v některých případech záměr akce může dojít ke ztrátě v řadě události myši a klávesnice.Například pokud váš ovládací prvek podporuje automatické dokončování, stejnou sadu události myši a klávesnice může způsobit jiné hodnoty při zkoušce je přehrát v jiném prostředí.Je-li přidat akci filtru protokolu plug-in který nahrazuje řadu události klávesnice a myši s jedinou akci.Tímto způsobem můžete nahradit řadu události myši a klávesnice výsledkem výběru hodnoty s jedinou akci, která nastaví hodnotu.Způsobem, který chrání kódované testů UI rozdíly v automatického dokončování z jednoho prostředí do druhého.

Hh552522.collapse_all(cs-cz,VS.110).gifPro podporu podporující záměr akce

CUIT_Actions

  1. Implementovat třídu akce filtru, která je odvozena z UITestActionFilter, přepsání vlastnosti ApplyTimeout, Category, Enabled, FilterType, Group a Name.

    internal class MyActionFilter : UITestActionFilter
    {
       // If the user actions we are aggregating exceeds the time allowed,
       // this filter is not applied. (The timeout is configured when the
       // test is run.)
       public override bool ApplyTimeout
       {
          get { return true; }
       }
    
       // Gets the category of this filter. Categories of filters
       // are applied in priority order.
       public override UITestActionFilterCategory Category
       {
          get { return UITestActionFilterCategory.PostSimpleToCompoundActionConversion; }
       }
    
       public override bool Enabled
       {
          get { return true; }
       }
    
    
       public override UITestActionFilterType FilterType
       {
          // This action filter operates on a single action
          get { return UITestActionFilterType.Unary; }
       }
    
       // Gets the name of the group to which this filter belongs.
       // A group can be enabled/disabled using configuration file.
       public override string Group
       {
          get { return "ChartControlActionFilters"; }
       }
    
       // Gets the name of this filter.
       public override string Name
       {
          get { return "Convert Double-Click to Single-Click"; }
       }
    
  2. Přepsat ProcessRule.Příklad zde realpces poklepejte na akci jediným klepnutím na tlačítko akce.

    public override bool ProcessRule(IUITestActionStack actionStack)
    {
        if (actionStack.Count > 0)
        {
            MouseAction lastAction = actionStack.Peek() as MouseAction;
            if (lastAction != null)
            {
                if (lastAction.UIElement.ControlTypeName.Equals(
                     ControlType.Text.ToString(),
                     StringComparison.OrdinalIgnoreCase))
                {
                    if(lastAction.ActionType == MouseActionType.DoubleClick)
                    {
                        // Convert to single click
                        lastAction.ActionType = MouseActionType.Click;
                    }
                }
            }
        }
        // Do not stop aggregation
        return false;
    }
    
  3. Přidat akci filtru, který GetService metoda rozšíření balíčku.

    public override object GetService(Type serviceType) 
    { 
       if (serviceType == typeof(UITestPropertyProvider)) 
       { 
          if (propertyProvider == null)
          {
             propertyProvider = new PropertyProvider();
          } 
          return propertyProvider;
       } 
       else if (serviceType == typeof(UITestActionFilter)) 
       { 
          if (actionFilter == null)
          {
             actionFilter = new RadGridViewActionFilter();
          }
          return actionFilter; 
       } 
       return null;
    }
    
  4. Sestavit vaše binární soubory a zkopírujte je do % ProgramFiles %\Common Files\Microsoft Shared\VSTT\10.0\UITestExtensionPackages.

[!POZNÁMKA]

Akce filtru není závislá na usnadnění provádění nebo na vlastnost zprostředkovatel.

Ladění vlastností zprostředkovatele nebo akce filtru

Vlastnosti zprostředkovatele a akce filtru jsou implementovány v rozšíření balíčku, který je načten a spuštěn v kódované Tvůrce testu UI v procesu odděleném od vaší aplikace.

Chcete-li ladit vlastnosti zprostředkovatele nebo akce filtru

  1. Sestavení ladicí verzi kopii balíčku rozšíření knihoven DLL a PDB soubory na % ProgramFiles %\Common Files\Microsoft Shared\VSTT\10.0\UITestExtensionPackages.

  2. Spuštění aplikace (nikoli v ladicím programu).

  3. Spusťte kódované Tvůrce testu uživatelského rozhraní.

    codedUITestBuilder.exe /standalone

  4. Připojení ladicího programu k procesu codedUITestBuilder.

  5. Nastavit zarážky v kódu.

  6. V kódované Tvůrce testu uživatelského rozhraní vytvořit uplatňuje vykonávat poskytovatele vlastnost a zaznamenávat akce vykonávat akce filtry.

Externí zdroje

Hh552522.collapse_all(cs-cz,VS.110).gifPokyny

Testování pro nepřetržité dodávky s Visual Studio 2012 – kapitola 2: testování: testování vnitřní

Viz také

Referenční dokumentace

AccessibleObject

Koncepty

Ověřování kódu pomocí programových testů uživatelského rozhraní