Biz→Selenium
BizRobo!には、Webオートメーション機能とDesktopオートメーション機能があります。Web画面の操作を自動化する場合でも、Webオートメーション機能を使う場合もあれば、Desktopオートメーション機能を使う場合もあります。
Webオートメーション機能を使って自動化する場合は、BizRobo!内部のブラウザ機能を使うので、マウスの移動やキー入力操作を実際に行う訳ではありません。これに対してDesktopオートメーション機能を使って自動化する場合は、パソコンにインストールしているEdgeやChromeといったブラウザでWeb画面を表示して、ブラウザウィンドウ上でマウスを移動したり、クリックしたり、テキストボックスに文字を入力したり、人が操作するときと同様に操作します。
このため、Desktopオートメーション機能を使って自動化する場合は、突発的・偶発的にパソコンスクリーン上に現れる外的要因が原因で、想定通りの操作ができないことがあります。

■ロボットの操作を妨害する外的要因の例(括弧内は結果)
・ポップアップウィンドウ表示(フォーカスが奪われで入力操作ができない)
・マウスやタッチパッドの操作(マウスが正しい位置に移動できない)

課題への対応方法としては、(1)外的要因の発生を考慮した実装をするか、(2)外的要因の影響を受けない実装をするかの、2つの方法が考えられます。

(1)外的要因の発生を考慮した実装について
これらは現象の発生タイミングを予想できないため、外的要因の発生を防ぐことが難しいのですが、現象が発生したことを検出してリカバリーすることが、ある程度は可能です。

■入力処理が正しく実行できたか検証してリトライすることは可能
テキストボックスに文字入力する処理であれば、入力処理後に表示内容を抽出して、入力値 ≠ 抽出値 ならば、リトライするように処理を実装しておけば、ロボットの操作を妨害する外的要因が瞬間的で継続性が無い現象のときは、リトライで正しい実行結果が得られる可能性があります。

■入力結果検証処理を実装する場合の注意事項
入力結果を検証する処理を実装するとなると、ロボットの開発工数がかさみます。また、入力項目1つについて入力処理と抽出処理を行うので、入力処理だけ実装する場合と比べて処理時間が2倍になります。
また、1ページの入力項目数が多い場合、FreezeTreeステップを利用して(タグ情報の取得回数を減らすことができるのでタグ情報取得に掛かる処理時間を減して)高速化するのが通例ですが、「FreezeTreeステップの中ではタグ情報を更新しないため、入力処理直後に抽出しても入力結果を取得できない。」という問題が発生します。高速化を図るためには、入力処理のFreezeTreeステップと抽出処理のFreezeTreeステップに分けて処理を組む必要があります。ちょっと煩雑になるかもしれません。

(2)外的要因の影響を受けない実装方法について
Desktopオートメーションでマウス操作とキー操作を行わない実装にしたら、Webオートメーションのように安定した画面操作が期待できます。BizRobo!とSelenium WebDriverを連携することで、マウス操作とキー操作を回避する方法を考案したので、紹介します。

■コンセプト
「Seleniumと連携することでマウス操作とキー操作を回避する」がコンセプトで、ブラウザの表示内容を取得する機能は実装しません。ブラウザの表示内容を取得する場合は、Desktop Automationの機能を使うものとします。

■仕掛け
Selenium Driverへのコマンド送信を中継するSeleniumコントローラーをPowerShellスクリプトで実装する案です。Desktop Automationステップでは「Set Clipboard」を使って、簡易的なブラウザ操作コマンドをクリップボードに書き込み、PowerShellスクリプトがクリップボードから読み出したブラウザ操作コマンドをSelenium DriverのAPIに変換して、Selenium Driverに連携します。
(下図の番号は、処理の順番を表しています。)

Selenium4DA関連図

■DesktopオートメーションとPowerShellスクリプトの同期処理について
マウス操作とキー操作はSelenium、ブラウザの表示内容取得はDesktop Automation、という機能分担にする場合、BizRobo!からSeleniumコントローラーへ、操作コマンドを複数回に分けて渡すことができるように、同期を取る仕掛けが必要です。同期を取る仕掛けとしては、Windowsプロセス間で使えるシグナル送受信の機能「waitfor」を使って実装します。
同期の取り方を、上記図を使って説明します。
[1]コントローラー起動・・・Seleniumコントローラーが立ち上がってシグナル待ちになる。(シグナルを受信するまでスクリプトは進まない。)
[2]操作コマンド書込・・・クリップボードに操作コマンドをコピーする。
[3]コマンド実行要求・・・[1]でシグナル待ちになっているシグナルを送る。
[4]読出・・・クリップボードから操作コマンドを読み出す。
[5]API呼出・・・操作コマンドをSelenium Driver用に変換してAPIを呼び出す。操作コマンドをすべて処理したら、[1]と同様にシグナル待ちになる。シグナル待ちになった場合は、Selenium Driverを停止するコマンドが現れるまで[2], [3], [4], [5]の繰り返しになる。操作コマンドにSelenium Driverを停止するコマンドが現れたらシグナル待ちにせずに終了する。

■ダウンロード
上記で紹介した内容は、「ROBOT-HUB」で公開中です。PoweShellスクリプト例や動作確認用のロボットを、下記URLからダウンロードすることができます。

【共通部品】Selenium WebDriver連携用コントローラー

「ROBOT-HUB」では共通部品を無料でダウンロードできます!