単一のスクリプト内でのパラメータの作成と受け渡し

親スクリプトと子スクリプト間で、または単一のスクリプトを使用して、パラメータを作成して渡すことができます。親子シナリオを使用することには、複数の子スクリプトで親スクリプトを使用できるという利点があります。たとえば、親スクリプトによって乱数が作成される場合に、その機能を複数の子スクリプトで使用することがあります。

  1. スクリプトを作成します。
    1. ファイル > 新規作成 を選択します。
      資産の新規作成 ダイアログ ボックスが開きます。
    2. [資産の種類] リストから .NET スクリプト を選択し、資産名 テキスト ボックスにスクリプトの名前を入力します。

      たとえば、スクリプトに「NameParameters」という名前を付けることができます。

    3. OK をクリックして、スクリプトを保存します。 Silk Test Workbench によってスクリプトが資産として保存され、スクリプト テンプレートが表示されます。
  2. アプリケーションをテストするスクリプトを記録または入力します。 たとえば、サンプル Web アプリケーションの登録フォームで姓名を処理する場合は、姓名を含む登録フォームのスクリプトを記録します。以下に、スクリプトの例を示します。
    Imports SilkTest.Ntf.XBrowser
    Public Module Main
      Dim _desktop As Desktop = Agent.Desktop
    
      Public Sub Main()
        With _desktop.BrowserWindow("/BrowserApplication[1]//BrowserWindow")
          .DomButton("@id='login-form:signup'").Select()
          .DomTextField("@id='signup:fname'").SetText("first")
          .DomTextField("@id='signup:lname'").SetText("last")
          .DomElement("@src='http://extjs.com/s.gif'").DomClick(MouseButton.Left, 
            New Point(8, 16))
          .DomButton("@textContents='Today'").Select()
          .DomTextField("@id='signup:email'").SetText("test@test1.com")
          .DomTextField("@id='signup:street'").SetText("123 street rd")
          .DomTextField("@id='signup:city'").SetText("Marlton")
          .DomListBox("@id='signup:state'").Select("Massachusetts")
          .DomTextField("@id='signup:zip'").SetText("09876")
          .DomTextField("@id='signup:password'").SetText("test")
          .DomButton("@id='signup:signup'").Select()
          .DomButton("@id='signup:continue'").Select()
        End With
    		
      End Sub
    End Module
  3. 作成して子スクリプトに渡すパラメータが含まれる、2 番めの Main() サブを作成します。 たとえば、以下のスクリプトは、テスト アプリケーションで姓名の文字列を渡します。
    Public Sub Main()
      Dim args As New Dictionary(Of String, Object)
      args("FName") = "Chris"
      args("LName") = "Smith"           
    
  4. 最初の Main() サブ スクリプトの呼び出しと作成したパラメータの名前指定を行う、Main(args) コマンドを組み込みます。 たとえば、以下のコードは、テスト アプリケーションで姓名の文字列を渡し、args というパラメータを呼び出します。
    Public Module Main
      Dim _desktop As Desktop = Agent.Desktop
    
      Public Sub Main()
        Dim args As New Dictionary(Of String, Object)
        args("FName") = "Chris"
        args("LName") = "Smith"
                
        Main(args)
    
      End Sub
    End Module
    
  5. 設定して親スクリプトに渡す、IDictionary(Of String, Object) という 1 つのパラメータを使用するように、アプリケーションをテストする Sub Main() を変更します。 IDictionary クラスは、.NET によって提供されます。クラスのドキュメントは、http://msdn.microsoft.com/en-us/library/s4ys34ea.aspx で確認できます。
    修正された Sub Main () コードは、以下のようになります。
    Public Sub Main(args As IDictionary(Of String, Object))
          
  6. パラメータを使用するコントロールを変更します。
    たとえば、Web アプリケーションの記録で姓名を変更するには、以下のコードを置換します。
    .DomTextField("@id='signup:fname'").SetText("first")
    .DomTextField("@id='signup:lname'").SetText("last")
    以下のように置換します。
    .DomTextField("@id='signup:fname'").SetText(args("FName"))
    .DomTextField("@id='signup:lname'").SetText(args("LName"))
    スクリプトは以下のようになります。
    Imports SilkTest.Ntf.XBrowser
    Public Module Main
      Dim _desktop As Desktop = Agent.Desktop
    
      Public Sub Main(args As IDictionary(Of String, Object))
      With _desktop.BrowserWindow("/BrowserApplication[1]//BrowserWindow")
        .DomButton("@id='login-form:signup'").Select()
        .DomTextField("@id='signup:fname'").SetText(args("FName"))
        .DomTextField("@id='signup:lname'").SetText(args("LName"))
        .DomElement("@src='http://extjs.com/s.gif'").DomClick(MouseButton.Left, 
          New Point(8, 16))
        .DomButton("@textContents='Today'").Select()
        .DomTextField("@id='signup:email'").SetText("test@test1.com")
        .DomTextField("@id='signup:street'").SetText("123 street rd")
        .DomTextField("@id='signup:city'").SetText("Marlton")
        .DomListBox("@id='signup:state'").Select("Massachusetts")
        .DomTextField("@id='signup:zip'").SetText("09876")
        .DomTextField("@id='signup:password'").SetText("test")
        .DomButton("@id='signup:signup'").Select()
        .DomButton("@id='signup:continue'").Select()
      End With
    		
      End Sub
    
      Public Sub Main()
        Dim args As New Dictionary(Of String, Object)
        args("FName") = "Chris"
        args("LName") = "Smith"
           
        Main(args)
    
      End Sub
    
    End Module
  7. 省略可能:スクリプトで入力されるパラメータを返すメッセージ ボックスを組み込むには、以下のコードを追加します。
    MsgBox("Hello, " + args("FName") + "!")
    MsgBox ("Hello, " + args("FName") + " " +  args("LName") + "!")
    
    スクリプトの再生時に、テストで入力される値を示すメッセージ ボックスが表示されます。

    スクリプトは以下のようになります。

    Imports SilkTest.Ntf.XBrowser
    Public Module Main
      Dim _desktop As Desktop = Agent.Desktop
    
      Public Sub Main(args As IDictionary(Of String, Object))
      With _desktop.BrowserWindow("/BrowserApplication[1]//BrowserWindow")
        .DomButton("@id='login-form:signup'").Select()
        .DomTextField("@id='signup:fname'").SetText(args("FName"))
        .DomTextField("@id='signup:lname'").SetText(args("LName"))
        .DomElement("@src='http://extjs.com/s.gif'").DomClick(MouseButton.Left, 
          New Point(8, 16))
        .DomButton("@textContents='Today'").Select()
        .DomTextField("@id='signup:email'").SetText("test@test1.com")
        .DomTextField("@id='signup:street'").SetText("123 street rd")
        .DomTextField("@id='signup:city'").SetText("Marlton")
        .DomListBox("@id='signup:state'").Select("Massachusetts")
        .DomTextField("@id='signup:zip'").SetText("09876")
        .DomTextField("@id='signup:password'").SetText("test")
        .DomButton("@id='signup:signup'").Select()
        .DomButton("@id='signup:continue'").Select()
      End With
    		
      End Sub
    
      Public Sub Main()
        Dim args As New Dictionary(Of String, Object)
        args("FName") = "Chris"
        args("LName") = "Smith"
           
        Main(args)
    
        MsgBox("Hello, " + args("FName") + "!")
        MsgBox ("Hello, " + args("FName") + " " +  args("LName") + "!")
    
      End Sub
    
    End Module
  8. 再生 をクリックします。