2018.10.03
UiPathの勉強をおこなっていると、セレクタという単語は必ず目にすることでしょう。
セレクタについて何も知らない人が見ると、セレクタとは何なのか、よく理解できないと思います。
今回のコラムではそのセレクタというものをよく使用するであろうレコーダーと共に見ていきたいと思います。
まずはとても簡単にセレクタのイメージを筆者の感性を交えて紹介します。
初めに言ってしまうと、UiPathにおけるセレクタは
「目的地への道順を教えてくれるおじさん」
だと筆者は思っています。
例を考えるとわかりやすいと思います。
クリックしたい目的のボタンがあったとします。
人間は目で見て「ここのボタンだ!」とクリックするかもしれませんが、ロボットにはそうはいきません。
ロボットにはそのボタンが
どこのデスクトップ上にあるか(「このパソコンのデスクトップです。」)
どこのアプリ上にあるか(「今アクティブになっているアプリです。」)
どんな要素を持っているか(「タイトルテキストにリンクがはってあるものです。」)
のように順を追って説明していく必要があります。
この道のりを教えてくれるものこそがセレクタです。
このセレクタについて具体的にレコーダーを解説しながら一緒に理解していこうかと思います。
まずは簡単にレコーダーについて見ていきます。
いろんな自動化する中で、レコーダーというものをよく見るかと思います。
レコーダーは人間の動きを覚えて、簡単に再現・自動化することができるものの一つです。
レコーダーには大まかに4つあります。
Basic Recorder、Desktop Recorder、Web Recorder、Citrix Recorder
上記のようなレコーダーがUiPathには存在して、それぞれにはそれぞれの特徴があります。
その特徴をまとめていきたいと思います。
●Basic Recorder(以下 ベーシックレコーダー)
・デスクトップアプリケーションを自動化するのに使用します
・他のレコーダーに比べて速さは劣りますが、マルチウィンドウでも使用可能です
・完全セレクタを生成し、コンテナを作成しません
●Desktop Recorder(以下 デスクトップレコーダー)
基本的にはベーシックレコーダーに似ています。
・デスクトップアプリケーションを自動化するのに使用します
ベーシックレコーダーと違う点もあります。
・Attach Windowコンテナをつくり、部分セレクタを生成します
・同じアプリケーションウィンドウごとにコンテナを生成します
・一つのアプリケーションで複数の操作を行うときに使用します
・ベーシックレコーダーよりも高速に動きます
●Web Recorder(以下 ウェブレコーダー)
他の3つの中ではデスクトップレコーダーに最も似ています。
・ウェブやブラウザでレコーディングを行うときに使用します
・既定でSimulate Type/Clickアクティビティを使います
(これを使用することで高速になり、バックグラウンドでも使用可能になりますが、
特殊キーなどを送ることができないことなどの注意点もあります。)
・Attach Browserコンテナを作成し、部分セレクタを生成します
●Citrix Recorder(以下 シトリックスレコーダー)
今までのレコーダーとは違ったレコーダーです。
・Citrixや仮想マシンなどの仮想環境で使用します
・画像やテキスト、キーボードの自動化が主で位置を特定することで自動化が可能です
・アクティビティによっては部分セレクタを生成します
どのような状況で自動化をするかによって使用するレコーダーが異なります。
仮想環境ではシトリックスレコーダーを使用し、
ウェブブラウザなどではウェブレコーダーを使用し、
また、デスクトップアプリケーションの自動化ではベーシックレコーダーやデスクトップレコーダーを使用します。
また、このベーシックレコーダーとデスクトップレコーダーには大きな違いがあります。
それは、コンテナをつくるかどうかです。
ベーシックレコーダーは他の3つレコーダーとは違って、自動化を行う際にコンテナをつくりません。
このコンテナをつくるかどうかがセレクタに大きく関係してきます。
具体的にどのように違うかと言うと、
コンテナをつくらない場合は、完全セレクタ(full selector)を生成しますが、
コンテナをつくる場合は部分セレクタ(partial selector)を生成します。
完全セレクタと部分セレクタの違いは、トップレベルのウィンドウのセレクタを含むかどうかです。
言葉だけだと分かりにくいので実際の例を見ていきましょう。
今回考える簡単な自動化は、メモ帳でフォントをメイリオに変更することです。
自動化のプロセスは簡単に言うと、3つだけです。
1,メモ帳アプリのメニューの書式をクリック
2,フォントをクリック
3,フォント名をメイリオにする
この自動化をベーシックレコーダーとデスクトップレコーダーで行って、違いを見ていきます。
まずは、ベーシックレコーダーでのワークフローです。
とても簡単なワークフローです。
先ほどの3つのプロセスを行っているだけなのが分かると思います。
次に、デスクトップレコーダーでのワークフローをお見せします。
先ほどとは違って、アクティビティそれぞれがAttach Windowコンテナに入っていることがわかります。
これがコンテナの有無です。
デスクトップレコーダーはアプリケーションウィンドウごとにコンテナを作成しますが、
ベーシックレコーダーはコンテナを作成しません。
コンテナの違いを確認したところで、次はそれぞれのセレクタを見ていきます。
それぞれのレコーディングでのアクティビティごとにセレクタをまとめてみました。
隣り合っているセレクタは同じ操作を行っています。
この表で左(ベーシックレコーダー)と右(デスクトップレコーダー)を
見比べてみるとすぐ気づくと思うのですが、
デスクトップレコーダーのセレクタは、ベーシックレコーダーの一行目がごっそり抜けている
のが分かります。
これがトップレベルのウィンドウがあるかどうかの違いです。
左(ベーシックレコーダー)はアクティビティごとに
「メモ帳ウィンドウの」という断り書きがあるのに対して、
右(デスクトップレコーダー)は断り書きをスキップしていきなりボタンのUi要素を指しています。
では、ロボットはどこで「メモ帳ウィンドウの」という道のりを知っているのでしょうか。
ここで先ほど説明した、コンテナが役に立ちます。
言ってしまうと、
コンテナ自体が「メモ帳ウィンドウの」という断り書きを入れている
のです。
コンテナ内に入っているアクティビティはすべて同じウィンドウ内で行われているものなので、
この断り書きをスキップしてセレクタを生成してもロボットは分かるということなのです。
これでセレクタをスキップすることができる理由が分かったと思います。
最後にセレクタの中身だけ軽く紹介しておきます。
ここでも先ほどのセレクタを使用します。
以下はベーシックレコーダーでメモ帳の書式ボタンを押すためのセレクタです。
<wnd app=’notepad.exe’ cls=’Notepad’ title=’無題 – メモ帳’ /> <ctrl automationid=’MenuBar’ idx=’1′ name=’アプリケーション’ role=’menu bar’ /> <ctrl name=’書式(O)’ role=’menu item’ /> |
●一行目
<wnd app=’notepad.exe’ cls=’Notepad’ title=’無題 – メモ帳’ />
wnd、つまりウィンドウがnotepad.exeという名前であり、
タイトルが無題-メモ帳であることを教えてくれています。
●二行目
<ctrl automationid=’MenuBar’ idx=’1′ name=’アプリケーション’ role=’menu bar’ />
ここではクリックする対象が、メニューバーにあるindexが1のものであると教えています。
●三行目
<ctrl name=’書式(O)’ role=’menu item’ />
ここではクリックする対象が、書式という名前のアイテムをもつものだと教えています。
このように順番に目的地までの道のりを教えているのが分かると思います。
これで、初めに言ったセレクタのイメージが上手く伝わればと思います。
セレクタはとても重要な要素なので、イメージをもって
ゆっくりでもしっかりと理解していくことをお勧めします。