Sdílet prostřednictvím


Povolení programového testování uživatelského rozhraní pro vaše ovládací prvky

Ovládací prvek lze snadněji otestovat, pokud se rozhodnete implementovat podporu pro rámci programové testování uživatelského rozhraní.Zvýšení úrovně podpory můžete přidat postupně.Můžete začít podporou záznam a přehrávání a vlastnost ověření.Můžete vytvářet, na který chcete, aby tvůrce programové testování uživatelského rozhraní k rozpoznání vlastní vlastnosti ovládacího prvku a zadat vlastní třídy přístup k těmto vlastnostem z generovaného kódu.Může také pomoci programové uživatelského rozhraní test Tvůrce zachycení akce tak, aby se blíží úmyslu dané nevynutitelné zaznamenávány akce.

V tomto tématu:

  1. Podpora záznam a přehrávání a vlastnosti ověřování implementací pro usnadnění přístupu

  2. Přidat vlastní vlastnosti ověřování implementací zprostředkovatel vlastností

  3. Nepodporuje generování kódu implementací třídy pro přístup k vlastní vlastnosti

  4. Podpora záměr identity akce implementací filtr akce

CUIT_Full

Podpora záznam a přehrávání a vlastnosti ověřování implementací pro usnadnění přístupu

Tvůrce programové testování uživatelského rozhraní zaznamená informace o ovládací prvky, zaznamená během nahrávání a poté generuje kód k opakování této relace.Pokud váš ovládací prvek nepodporuje usnadnění, bude Tvůrce programové testování uživatelského rozhraní zachytit akce (podobně jako myší) pomocí souřadnic obrazovky.Při přehrávání test generovaný kód vydá těchto kliknutí myší ve stejné souřadnice obrazovky.Pokud váš ovládací prvek zobrazí v na jiné místo na obrazovce při přehrávání test, se nezdaří generovaný kód k provedení této akce ovládacího prvku.To může způsobit selhání Pokud test přehrávání na obrazovce různé 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 Tvůrce programové testování uživatelského rozhraní bude pomocí nich zaznamenat informace o ovládací prvek při jejím zaznamenává zkoušky a generuje kód.Potom když spustíte test, generovaný kód bude přehrát tyto události u ovládacího prvku, i když je jinde v uživatelském rozhraní.Autoři test bude také možné vytvořit vyhodnotí pomocí základní vlastnosti ovládacího prvku.

CUIT_Record

Pro podporu záznam a přehrávání, vlastnost ověření a navigace u ovládacího prvku formulářů Windows

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

CUIT_Accessible

  1. Implementovat třídu, která je odvozena z ControlAccessibleObjecta přepište AccessibilityObject vlastnost, která má vracet 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řepsání přístupný objekt Role, State, GetChild a GetChildCount vlastnosti a metody.

  3. Implementovat jiný objekt usnadnění pro podřízený ovládací prvek a přepište podřízeného ovládacího prvku AccessibilityObject vlastnost, která má být vrácen tohoto objektu pro usnadnění přístupu.

  4. Přepsání 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á ukázku pro usnadnění přístupu v AccessibleObject v tomto postupu a poté sestavení, na který v zbývající postupy.Pokud chcete vytvořit pracovní verzi ukázky pro usnadnění přístupu, vytvoření aplikace konzoly a poté nahraďte kód ve Program.cs ukázkový kód.Chcete-li přidat odkazy na usnadnění, System.Drawing a System.Windows.Forms budete potřebovat.Měli byste změnit Embed Types vzájemná funkční spolupráce pro usnadnění přístupu na hodnotu False eliminuje varování při sestavení.Typ výstupu projektu k z konzoly aplikace do aplikace pro systém Windows můžete změnit tak, aby okna konzoly nezobrazí při spuštění aplikace.

Podpora vlastní vlastnost ověření implementací zprostředkovatel vlastností

Poté, co jste implementována základní podpora pro ověření záznamu a přehrávání a vlastnosti, můžete zpřístupnit vlastní vlastnosti ovládacího prvku na programové testy uživatelského rozhraní implementací UITestPropertyProvider modul plug-in.Následující postup můžete například vytvoří vlastnost zprostředkovatele, který umožňuje programové testy uživatelského rozhraní pro přístup k vlastnosti stavu ovládací prvek graf CurveLegend podřízených ovládacích prvků.

CUIT_CustomProps

Chcete-li zajistit podporu ověřování na vlastní vlastnost

CUIT_Props

  1. Přepsání křivky legendu přístupné objektu Description vlastnost k předání bohaté vlastnost hodnot v řetězci popis oddělena od hlavní popisu (a vzájemně Pokud implementujete více vlastností) středníkem (;).

    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í testování uživatelského 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 vložit definiční typy pro usnadnění přístupu na hodnotu False.

  3. Přidat třídy zprostředkovatele vlastnost, která je odvozena 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. Implementaci zprostředkovatele vlastnost umístěním názvy vlastností a popisovače vlastnosti v Dictionary.

    // 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řepsání UITestPropertyProvider.GetControlSupportLevel označuje, že vaše sestavení poskytuje podporu specifické pro ovládací prvek pro ovládací prvek a jeho podřízených členů.

    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řepsání zbývající abstraktní metody 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řída balíčku 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íčku rozšíření přepsání UITestExtensionPackage.GetService má být vrácena třída zprostředkovatele vlastnost, pokud je požadována vlastnost zprostředkovatele.

    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řepsání 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. Vytvářet vaše binární soubory a zkopírovat je do % ProgramFiles %\Common Files\Microsoft Shared\VSTT\10.0\UITestExtensionPackages.

[!POZNÁMKA]

Tento balíček rozšíření budou použity na všechny ovládací prvky, které je typu "Text".Pokud testujete více ovládacích prvků stejného typu, budete muset testovat samostatně a spravovat, které rozšíření balíčky jsou nasazeny při záznamu testy.

Nepodporuje generování kódu implementací třídy pro přístup k vlastní vlastnosti

Tvůrce programové testování uživatelského rozhraní generuje kód na základě 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ředkovatele poskytují přístup k vlastní vlastnosti ovládacího prvku, můžete přidat specializovanou třídu, která se používá pro přístup k těmto vlastnostem tak, aby je usnadněna generovaného kódu.

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

Chcete-li přidat specializovanou třídu pro přístup k vašeho ovládacího prvku

CUIT_CodeGen

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

    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řepsání zprostředkovatel vlastností UITestPropertyProvider.GetSpecializedClass metoda vrátí typ novou třídu pro křivku legendu 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řepsání zprostředkovatel vlastností GetPropertyNamesClassType metoda vrátí typ metody PropertyNames novou třídu.

    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;
    }
    

Podpora záměr identity akce implementací filtr akce

Pokud sadu Visual Studio zaznamenává zkoušky, zaznamená jednotlivých událostí myši a klávesnice.Nicméně v některých případech úmyslu dané nevynutitelné 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 mít za následek jinou hodnotu při test přehrávání v jiném prostředí.Můžete přidat filtr akce modul plug-in s nahradí sérii události klávesnice a myši jediná akce.Tímto způsobem můžete nahradit řadu událostí myši a klávesnice výsledkem výběru hodnoty s jediná akce, které nastavuje hodnotu.Rozdíly mezi aplikacemi automatické dokončování z jednoho prostředí do druhého způsobem, který chrání programové testy uživatelského rozhraní.

Chcete-li podporovat záměr identity akce

CUIT_Actions

  1. Implementovat třídu filtru akce, 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řepsání ProcessRule.V příkladu zde realpces poklepejte na ikonu akce s jedním kliknutí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 filtr akce GetService metody 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. Vytvářet vaše binární soubory a zkopírovat je do % ProgramFiles %\Common Files\Microsoft Shared\VSTT\10.0\UITestExtensionPackages.

[!POZNÁMKA]

Filtr akce není závislá na implementaci usnadnění nebo na vlastnost zprostředkovatele.

Umožňuje ladit zprostředkovatel vlastností nebo filtr akce

Vlastnost zprostředkovatele a akce filtru jsou implementovány do balíčku aplikace rozšíření, která je načtena a spustit Tvůrce programové testování uživatelského rozhraní v procesu odděleně od vaší aplikace.

Na ladění vašeho zprostředkovatele nebo akce filtru vlastností

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

  2. Spusťte aplikaci (není v ladicí program).

  3. Spusťte Tvůrce programové testování uživatelského rozhraní.

    codedUITestBuilder.exe /standalone

  4. Připojí ladicí program k procesu codedUITestBuilder.

  5. Umožňuje nastavit zarážky ve vašem kódu.

  6. V Tvůrci programové testování uživatelského rozhraní vytvořit vyhodnotí vykonávat poskytovatele vlastnost a záznam akcí vykonávat filtry akce.

Externí zdroje

Doprovodné materiály

Testování pro průběžně odesílané pomocí sady Visual Studio 2012 – kapitola 2: testování částí: testování uvnitř

Viz také

Referenční dokumentace

AccessibleObject

Koncepty

Ověřování kódu pomocí automatizace uživatelského rozhraní