LoginSignup
1
1

[UiPath]Workflow Analyzerカスタムルール作成(セレクターをチェックするルール)

Posted at

はじめに

セレクターをリリース前にチェックすることは、UiPathプロジェクトの品質、信頼性、および効率性を確保するために重要です。

セレクターをチェックする手段としては、UiExploerというツールで実際に動作確認を行うのは一般的だと思われます。日々の開発運用で蓄積されたセレクターに関するノウハウは存在するかと思いますが、これらに対するチェックは目視で行われているでしょう。
一般的なUiPath RPAプロジェクトには、すくなければ数十個、多ければ数百個のUI要素が含まれていて、
それに相応な数のセレクターが存在しているわけです。その規模のセレクターに対して目視チェックはなかなか非効率でしょう。

そこでUiPath Workflow Analyzer カスタムルールで出番です。
カスタムルールを実装することで、すべてまたは特定なシステムのセレクターに対して、任意なチェックルールを作成することができ、ワンクリック操作で一気にセレクターに対するチェックを行うことができるので、作業効率を向上することが期待できます。目視チェックの代わりにカスタムルールのご利用をおすすめします。

UiPath Workflow Analyzer カスタムルールの作り方については、
ぜひ公式資料をご覧ください。
https://www.uipath.com/ja/community-blog/knowledge-base/workflow-analyzer-custom-rule-development-guide

ここでは、カスタムルールを作成する際に、セレクターのチェック方法について紹介します。

紹介したいサンプル例 

エクセル内に存在するハイパーリンクをクリックする自動化処理があります。
sample1.PNG

このリンクのセレクターを取ってみましょう。

<wnd app='excel.exe' cls='XLMAIN' title='Book1 - Excel' />
<uia automationid='Grid' cls='XLSpreadsheetGrid' name='グリッド' />
<uia automationid='B3' cls='XLSpreadsheetCell' name='B3' tableCol='2' tableRow='3' />
<uia automationid='Hyperlink' name='ハイパーリンク ハイパーリンク ' role='リンク' />

以下の操作を行った上で、セレクターを検証してみると、検証結果はNGになります。
a.ハイパーリンクを一度クリックする
b.エクセルのスクロールバーをいじって、表示を変更する

再度セレクターを取ってみます。

<wnd app='excel.exe' cls='XLMAIN' title='Book1 - Excel' />
<uia automationid='Grid' cls='XLSpreadsheetGrid' name='グリッド' />
<uia automationid='B3' cls='XLSpreadsheetCell' name='B3' tableCol='1' tableRow='1' />
<uia automationid='Hyperlink' name='表示済みのハイパーリンク ハイパーリンク ' role='リンク' />

その差分を確認すれば、検証NGの理由はわかります。
1.3行目  tableCol='2' tableRow='3' の部分は tableCol='1' tableRow='1' に変更されました。
2.4行目 name='ハイパーリンク ハイパーリンク ' の部分はname='表示済みのハイパーリンク ハイパーリンク 'に変更されました。

以下のようにセレクターを改修し、問題なく動作確認を取りました。

<wnd app='excel.exe' cls='XLMAIN' title='Book1 - Excel' />
<uia automationid='Grid' cls='XLSpreadsheetGrid' name='グリッド' />
<uia automationid='B3' cls='XLSpreadsheetCell' name='B3'/>
<uia automationid='Hyperlink' name='*ハイパーリンク ハイパーリンク ' role='リンク' />

従って、以下のルールが纏められるかと思います。
1.エクセルハイパーリンクのセレクターに対しては、表示位置情報(tableCol='1' tableRow='1')は存在してはいけない。
2.エクセルハイパーリンクのセレクターに対しては、Nameはクリック前後の値は変わるため、アスタリスクをNameに含むべき。

実際にそのルールを作成してみましょう

c# rule.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UiPath.Studio.Activities.Api;
using UiPath.Studio.Activities.Api.Analyzer;
using UiPath.Studio.Activities.Api.Analyzer.Rules;
using UiPath.Studio.Analyzer.Models;

namespace custumerRules_CR01
{
   public class SelectorToExcelWithoutRowColNum : IRegisterAnalyzerConfiguration
   {
       public void Initialize(IAnalyzerConfigurationService workflowAnalyzerConfigService)
       {
           System.Diagnostics.Debugger.Launch();   
           var forbiddenSelecotorRule = new Rule<IActivityModel>("CheckExcelSelectorRules", "EXCEL-001", InspectorSelectorWithCertainWords);
           forbiddenSelecotorRule.DefaultErrorLevel = System.Diagnostics.TraceLevel.Error;
           forbiddenSelecotorRule.Parameters.Add("strofparm", new Parameter()
           {
               DefaultValue = "demo",
               Key = "string",
               LocalizedDisplayName = "AnewRule"
           });
           workflowAnalyzerConfigService.AddRule<IActivityModel>(forbiddenSelecotorRule);
       }

       private InspectionResult InspectorSelectorWithCertainWords(IActivityModel activitestoInspect,Rule configerdrule)
       {
           var messagesList = new List<InspectionMessage>();

           foreach (var variable in activitestoInspect.Properties)
           {



               if((0 == variable.DisplayName.CompareTo("ターゲット")) || (0 == variable.DisplayName.CompareTo("Target")))
               {
                   foreach (var variable2 in variable.Arguments)
                   {

                       if ((0 == variable2.DisplayName.CompareTo("セレクター")) || (0 == variable2.DisplayName.CompareTo("Selecor")))
                       {
                           var strSelecotr = variable2.DefinedExpression;

                           //エクセルを対象にするセレクターの場合、TableRow、TableCol情報が含まれると、Warningに出る
                           if (strSelecotr.Contains("app='excel.exe'") && (strSelecotr.Contains("tableCol=") || strSelecotr.Contains("tableRow=")))
                           {
                               messagesList.Add(new InspectionMessage()
                               {
                                   Message = $"Activitie {activitestoInspect.DisplayName} contains keyword 'tableCol' or 'tableRow' which is unstable to excel selectors."
                               });
                           }
                           //エクセルを対象にするセレクターの場合、ハイパーリンクの文字がSelector情報に含まれると、*がついていなければWarningに出る
                           if (strSelecotr.Contains("app='excel.exe'") && (strSelecotr.Contains("ハイパーリンク") && !strSelecotr.Contains("*ハイパーリンク")))
                           {
                               messagesList.Add(new InspectionMessage()
                               {
                                   Message = $"Activitie {activitestoInspect.DisplayName} contains keyword 'ハイパーリンク' without the char '*'."
                               });
                           }
                       }
                   }
               }
           }

           if (messagesList.Count > 0)
           {
               return new InspectionResult()
               {
                   HasErrors = true,
                   InspectionMessages = messagesList,
                   ErrorLevel = System.Diagnostics.TraceLevel.Warning
               };
           }
           else
           {
               return new InspectionResult()
               {
                   HasErrors = false,
               };
           }
       }

   }
}

UiPath Studio で実行してみると問題なく異常を検知することができました。
sample2.PNG

終わりに

カスタムルールを作成し、セレクターに対する簡易てきなチェックルールの作成方法を紹介しました。
ぜひご参考してみて、自分でカスタムルールを作成してみてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1