uibot:みんなのためのロボット!
どの自動化された機械でもすべての間違いを避けることはできません。ターゲットセレクタを使用するとき、よくある質問は:
•マウスを動かしても、ターゲットとしてのインターフェイス要素をマスクで覆うことはできません(通常は大きすぎてウィンドウ全体を覆うことができません。)
マスクはインターフェイス要素のみをカバーできますが、生成されたデータを使用してターゲットを見つけようとするとき、次のような問題が現れます:o.選択の間違い(incorrect selection):インターフェイス要素が見つかったが、そのインターフェイス要素は最初に選択したものではありません。 o.選択の漏れ(missed selection):最初に選択したインターフェイス要素ははっきり存在していますが、見つかりません。
ターゲットを隠すことができない一番目の問題について後文で詳しく説明します。ここでは二番目の問題を中心に説明します。つまり、ターゲットがしっかりカバーされているが、動作中に間違いや漏れの問題がある場合です。
前述のように、ターゲットが選択されると、uibotはターゲットを説明するデートと同じような一連のデータを生成します:
{{{"wnd": [{"app": "explorer", "cls": "shell_traywnd"}, {"cls": "start", "title": "start"}}}.
uibotがこのプロセスを実行するとき、説明のデータに基づいてターゲットを見つけます。したがって、誤った選択または漏れが発生する場合、この一連のデータを修正する必要があります。どのように修正しますか? まず、次の入力ボックスに表示される[プロパティ]列の中での[ターゲット] プロパティを見つける必要があります。入力ボックスなので、理論上コンテンツを直接編集することはできますが、実際のところ、入力ボックスは小さすぎて編集できません。ターゲットを修正するとき、入力ボックスの右側にあるボタンを押すことをお勧めします。そしてターゲットを修正します。次に、このボタンを押すと、[target editor(ターゲットエディター)]ウィンドウがポップアップします。 前半はサムネイルで、ターゲットとしてのインターフェイス要素の普通な外観を示しています。 uibotは、ターゲットを探すときにこの画像を使用しません。 ただの参照用です。 後半は[コントロールフィルター(control filter)]で、ターゲットを説明するデータをツリーの形で再表示します。
ターゲットエディター
このツリー構造では、インターフェイス要素の一部の機能が保持されています。これらの機能は、uibotによって自動的に選択されます。すべての34機能が満たされる場合にだけ、インターフェイス要素が見つかります。それ以外、インターフェイス要素はネストされているため、uibotはインターフェイス要素の機能をターゲットとして記録するうえで、複数のレベルでインターフェイス要素の機能も保持します。各レベルの機能を全部満たす必要があります
line 0:オブジェクトとその下のコンテンツは、スタートメニューボタンの上部インターフェイス要素(windowsタスクバー)の機能を表しています。一方、line 1:オブジェクトとその下のコンテンツは、スタートメニューボタン自体の機能を表しています。このプロセスが実行されると、uibotはステップバイステップで検索します。まず、一級レベルのwindowsタスクバーを見つけます。次に、タスクバーですべての機能を満たすスタートメニューボタンを見つけます。このような厳密な機能マッチングによって、[選択の漏れ]が生じやすいです。たとえば、windowsが[スタート]メニューボタンのために、[タイトル]を設定しています。(そのタイトルは普通、ユーザーには表示されていませんが、実際には存在します)ボタンのタイトルは機能の一部として見られてきたので、普通変更しません。しかし、もしいつかそのボタンのタイトルが変更されれば、選択の漏れが生じます。
それでは、どのように修正しますか?タイトルの前にチェックボックスがあります。デフォルトの状態ではチェックされています。 チェックボックスをクリックして、チェックされていない状態35に設定してください。そこで、タイトルが変更された場合でも 、uibotはインターフェイス要素を探すときにこの機能を使用しません。ただし、機能が多く削除される場合、[選択の漏れ]は発生せず、代わりに[選択の間違い]が発生します。極端な例を挙げましょう。以下の両行のチェックを外した場合:
cls:'start'
title:'start'
明らかに、windowsタスクバーの下にある0:選択の間違いの状況でオブジェクトは基準を満たすことができます。インターフェイス要素が複雑しすぎる、または機能が頻繁に変更される場合です。しかし、この場合には特定の規則がないため、さらに実験して経験を積むしかありません。これは普通のコースです。読者がまず覚えていただきたいのは:
• 今の時点で、cls、aanameなどの機能名を理解していない場合がありますが、これらの用語については後で詳しく説明するので大丈夫です。
• 「任意のコンテンツの一致(matching arbitrary content)」を表すワイルドカード*(wildcards *)をうまく利用してください。 たとえば、タイトルフィーチャの値のインターフェイス要素が「name:zhang san」です。後者の「zhang san」は変わるかもしれませんが、前者の「name:」は変わらないです。したがって、タイトルとして「name:*」を機能として使用できます
• 機能を削除するとき、選択漏れを減らすことができますが、間違った選択を増やす可能性があるので、ご注意ください。 36プロセスが実行されている場合、選択の漏れは簡単に見つかりますが、選択の間違いはすぐには見つからないかもしれません。
次に、uibotがプロセスを実行するときに、ほとんどのターゲットコマンドはターゲットが見つからない場合に異常が生じ(ターゲットが存在するかどうかを確認するコマンドを除き)、そしてすぐに停止してエラーを報告します(試しの場合を除き)。キャッチ(catch)は、ターゲットの例外をキャッチするために使用されます。選択の間違いが出ると、uibotは実行を続けることをやめてエラーを簡単に検出することはできません。
最後に、同じインターフェイス要素は、異なるオペレーティングシステムとブラウザにおいて(特にieとchromeブラウザで)変更される可能性があります。同じページを表示するとき、同じインターフェース要素は完全に異なる特性を持つ場合があります。そして、ieではバージョン番号は機能と見なされます。 以下の図示すように、ieとchromeを使用してbaiduのホームページを開き、baiduの検索ボックスをターゲットとしますが、その特性は大きな違いがあることを気づいたでしょう。
ieとchromeでは、同じターゲットでの特性が異なります。uibotを使って処理する場合、または他のコンピューターで使用する場合、開発環境と実稼働環境37の一致性を保ってください。できるだけエラーを避けてください。