Condividi tramite


Procedura: creare una regola di estrazione personalizzata

Aggiornamento: novembre 2007

È possibile creare proprie regole di estrazione. A tale scopo, derivare le proprie regole da una classe di regole di estrazione. Le regole di estrazione derivano dalla classe di base ExtractionRule.

In Visual Studio Team System Test Edition sono disponibili alcune regole di estrazione predefinite. Per ulteriori informazioni, vedere Informazioni sulle regole di estrazione.

Nota:

È possibile anche creare regole di convalida personalizzate. Per ulteriori informazioni, vedere Informazioni sulle regole di convalida.

Per creare una regola di estrazione personalizzata

  1. Aprire il progetto Test contenente un test Web.

  2. (Facoltativo) Creare un progetto Libreria di classi distinto in cui archiviare la regola di estrazione.

    Nota importante:

    È possibile creare la classe nello stesso progetto in cui si trovano i test. Tuttavia, se si desidera riutilizzare la regola, è preferibile creare un progetto Libreria di classi distinto in cui archiviarla. Se si crea un progetto distinto, è necessario completare i passaggi facoltativi di questa procedura.

  3. (Facoltativo) Nel progetto Libreria di classi aggiungere un riferimento alla dll Microsoft.VisualStudio.QualityTools.WebTestFramework.

  4. Creare una classe che derivi dalla classe ExtractionRule. Implementare i membri Extract e RuleName.

  5. (Facoltativo) Generare il nuovo progetto Libreria di classi.

  6. (Facoltativo) Nel progetto di test aggiungere un riferimento al progetto Libreria di classi che contiene la regola di estrazione personalizzata.

  7. Nel progetto di test aprire un test Web nell'Editor test Web.

  8. Per aggiungere la regola di estrazione personalizzata, fare clic con il pulsante destro del mouse su una richiesta test Web e selezionare Aggiungi regola di estrazione.

    Verrà visualizzata la finestra di dialogo Aggiungi regola di estrazione. La regola di convalida personalizzata sarà presente nell'elenco Seleziona una regola, insieme alle regole di convalida predefinite. Selezionare la regola di estrazione personalizzata e fare clic su OK.

  9. Eseguire il test Web.

Esempio

Nell'esempio di codice seguente viene illustrata un'implementazione di una regola di estrazione personalizzata, che estrae il valore da un campo di input specificato. Utilizzare questo esempio come punto di partenza per le regole di estrazione personalizzate.

using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.WebTesting;
using System.Globalization;

namespace ClassLibrary2
{
    //-------------------------------------------------------------------------
    // This class creates a custom extraction rule named "Custom Extract Input"
    // The user of the rule specifies the name of an input field, and the
    // rule attempts to extract the value of that input field.
    //-------------------------------------------------------------------------
    public class CustomExtractInput : ExtractionRule
    {
        /// Specify a name for use in the user interface.
        /// The user sees this name in the Add Extraction dialog box.
        //---------------------------------------------------------------------
        public override string RuleName
        {
            get { return "Custom Extract Input"; }
        }

        /// Specify a description for use in the user interface.
        /// The user sees this description in the Add Extraction dialog box.
        //---------------------------------------------------------------------
        public override string RuleDescription
        {
            get { return "Extracts the value from a specified input field"; }
        }

        // The name of the desired input field
        private string NameValue;
        public string Name
        {
            get { return NameValue; }
            set { NameValue = value; }
        }

        // The Extract method.  The parameter e contains the Web test context.
        //---------------------------------------------------------------------
        public override void Extract(object sender, ExtractionEventArgs e)
        {
            if (e.Response.HtmlDocument != null)
            {
                foreach (HtmlTag tag in e.Response.HtmlDocument.GetFilteredHtmlTags(new string[] { "input" }))
                {
                    if (String.Equals(tag.GetAttributeValueAsString("name"), Name, StringComparison.InvariantCultureIgnoreCase))
                    {
                        string formFieldValue = tag.GetAttributeValueAsString("value");
                        if (formFieldValue == null)
                        {
                            formFieldValue = String.Empty;
                        }

                        // add the extracted value to the Web test context
                        e.WebTest.Context.Add(this.ContextParameterName, formFieldValue);
                        e.Success = true;
                        return;
                    }
                }
            }
            // If the extraction fails, set the error text that the user sees
            e.Success = false;
            e.Message = String.Format(CultureInfo.CurrentCulture, "Not Found: {0}", Name);
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports Microsoft.VisualStudio.TestTools.WebTesting
Imports System.Globalization

Namespace ClassLibrary2

    '-------------------------------------------------------------------------
    ' This class creates a custom extraction rule named "Custom Extract Input"
    ' The user of the rule specifies the name of an input field, and the
    ' rule attempts to extract the value of that input field.
    '-------------------------------------------------------------------------
    Public Class CustomExtractInput
        Inherits ExtractionRule

        ' Specify a name for use in the user interface.
        ' The user sees this name in the Add Extraction dialog box.
        '---------------------------------------------------------------------
        Public Overrides ReadOnly Property RuleName() As String
            Get
                Return "Custom Extract Input"
            End Get
        End Property

        ' Specify a description for use in the user interface.
        ' The user sees this description in the Add Extraction dialog box.
        '---------------------------------------------------------------------
        Public Overrides ReadOnly Property RuleDescription() As String
            Get
                Return "Extracts the value from a specified input field"
            End Get
        End Property

        ' The name of the desired input field
        Private NameValue As String
        Public Property Name() As String
            Get
                Return NameValue
            End Get
            Set(ByVal value As String)
                NameValue = value
            End Set
        End Property

        ' The Extract method.  The parameter e contains the Web test context.
        '---------------------------------------------------------------------
        Public Overrides Sub Extract(ByVal sender As Object, ByVal e As ExtractionEventArgs)

            If Not e.Response.HtmlDocument Is Nothing Then

                For Each tag As HtmlTag In e.Response.HtmlDocument.GetFilteredHtmlTags(New String() {"input"})

                    If String.Equals(tag.GetAttributeValueAsString("name"), Name, StringComparison.InvariantCultureIgnoreCase) Then

                        Dim formFieldValue As String = tag.GetAttributeValueAsString("value")
                        If formFieldValue Is Nothing Then

                            formFieldValue = String.Empty
                        End If

                        ' add the extracted value to the Web test context
                        e.WebTest.Context.Add(Me.ContextParameterName, formFieldValue)
                        e.Success = True
                        Return
                    End If
                Next
            End If
            ' If the extraction fails, set the error text that the user sees
            e.Success = False
            e.Message = String.Format(CultureInfo.CurrentCulture, "Not Found: {0}", Name)
        End Sub
    End Class
end namespace

Il metodo Extract contiene le funzionalità principali di una regola di estrazione. Il metodo Extract nell'esempio precedente assume il valore ExtractionEventArgs che fornisce la risposta generata dalla richiesta coperta da questa regola di estrazione. La risposta contiene HtmlDocument che contiene tutti i tag nella risposta. I tag di input vengono filtrati da HtmlDocument. In ciascun tag di input viene cercato un attributo denominato name il cui valore è uguale all'utente che ha fornito il valore della proprietà Name. Se viene rilevato un tag con questo attributo corrispondente, viene eseguito un tentativo di estrarre un valore contenuto nell'attributo value, se esiste. Se esiste, il nome e il valore del tag vengono estratti e aggiunti al contesto del test Web. La regola di estrazione viene passata.

Vedere anche

Attività

Procedura: aggiungere una regola di estrazione a un test Web

Procedura dettagliata: aggiunta di regole di convalida ed estrazione a un test Web

Procedura: creare una regola di convalida personalizzata

Riferimenti

ExtractionRule

Microsoft.VisualStudio.TestTools.WebTesting.Rules

ExtractAttributeValue

ExtractFormField

ExtractHttpHeader

ExtractRegularExpression

ExtractText

ExtractHiddenFields