13

Sikuli を使用して、Mac OS X および Windows のブラウザー内で実行される GUI アプリと Web アプリの両方を自動化したいと考えています。現在、私の目的はテストではなく、残念ながら現時点では低レベルの自動化アクセスを持たないチームのために、退屈で反復的なタスクを GUI で自動化することです。

プロジェクト間で再利用できる GUI アプリと Web アプリのスクリーン ショットのライブラリを 1 つ以上作成したいと考えています。多くの場合、さまざまなアプリに対して、または Web アプリに対して、さまざまなブラウザー/プラットフォームの組み合わせで、同じ自動化手順を実行していました。

再利用可能な Sikuli スクリーン ショット ライブラリを構築するための優れた戦略は何ですか? いくつかの考え:

  • Sikuli の外でスクリーン ショットをキャプチャし、それらの画像をスライス/ダイスして、Sikuli 内の特定のインターフェイス要素を引き出す必要がありますか?
  • 同様の GUI アプリで同等のインターフェイス要素のスクリーン ショットを追跡するにはどうすればよいですか?
  • 異なるブラウザーやプラットフォームで表示される同じ Web アプリのスクリーン ショットを追跡するにはどうすればよいですか?
  • 1 を選択し、次に 2 を選択し、次に 3 を選択する必要があるメニューなど、階層的な要素を最適に整理するにはどうすればよいでしょうか (ただし、次の選択は前の選択が選択された後にのみ表示されます)。
  • より一般的に参照できるようにするには、スクリーン ショットを変数として保存する必要がありますか?
  • スクリーン ショットを含む Python リストまたは辞書を作成する必要がありますか?
  • アプリケーション/プラットフォームに基づいて、スクリーン ショットを個別の Sikuli ファイルにグループ化する必要がありますか?

これらすべてにおいて、ライブラリを Python モジュールのようにインポートできると想定していますが、これはドキュメントから確かに可能であると思われます。

ありがとう!

4

4 に答える 4

18

「 Robust GUI Automation Library for Sikuli 」というアドオンがあります。

ライブラリを使用しなくなったとしても、問題の実装を見ることで学べる非常に良い教訓がいくつかあります。

いくつかの提案:

Sikuli の外でスクリーン ショットをキャプチャし、それらの画像をスライス/ダイスして、Sikuli 内の特定のインターフェイス要素を引き出す必要がありますか?

  1. 要素を取得する方法よりも重要なのは、それらの要素がどのように格納されるかです。グラフィックの命名方法を標準化します。つまり 、 Sikuliのunpredictable_default_name.png ではなく、Button_OK.png です。

  2. Sikuli スクリプトに画像ライブラリを「オンザフライ」で追加できます。異なるブラウザとプラットフォームのグラフィックを異なるディレクトリに保存します。

    myImagePath = "M:\\myImageLibrary\\"
    addImagePath(myImagePath)
    

同様の GUI アプリで同等のインターフェイス要素のスクリーン ショットを追跡するにはどうすればよいですか?

命名規則!

\\firefox\\Button_OK.png
\\IE8\\Button_OK.png

パターンの「類似性」を利用して、IE と Firefox の両方で同じグラフィックをヒットさせることもできます (ただし、誤検知はありません)。これには、少し試行錯誤が必要になる場合があります。

スクリーン ショットを含む Python リストまたは辞書を作成する必要がありますか?

これは本当に良い習慣であり、特定の状況でうまく機能しています。ただし、ファイル名は、リスト オフセットよりもスクリプト機能のドキュメントとして優れている場合があります。

これらすべてにおいて、ライブラリを Python モジュールのようにインポートできると想定していますが、これはドキュメントから確かに可能であると思われます。

はい、ライブラリをインポートできます。

于 2012-03-09T23:56:04.870 に答える
5

それはスピアソンが推奨する素晴らしいライブラリのようです。

リストにもう 1 つの概念を追加します。それは調整です。

あらゆる試験業界と同様に、機器の校正は必須です。

SQA/自動化の分野では、思い込みが災いをもたらすことがあります。

シナリオ:

月曜日に、Sikuli を利用した自動化で使用する Chrome 送信ボタンのスクリーン ショットを決定します。

あなたは迅速に作業し、火曜日までに、テスト スイートは期待どおりに正確な合格/不合格を提供しています。

金曜日の午後、ビールの直前に、マシンは Chrome の次のマイナー リリースに自動アップグレードされます。これにより、Sikuli が送信ボタンとして一致するようにキャンセル ボタンが変更されます。

週末にオフィスを出る前にレポートをちらりと見ると、レポートは通常どおり問題なく実行されているように見えますが、週末を通して事態が悪化する恐ろしい月曜日まで、レポートが誤検知を示していることに気付きません (しかし、 、少なくともあなたは良い週末を過ごしました!)。

完全に仮説的な状況ですが、うまくいけば、「テストをテストする」必要性、または一度書き込み、何度も実行される自動化環境でツールを調整する必要性が強調されます。

解決:

上記のような問題のある状況を軽減するために、静的ライブラリ内のスクリーンショットを操作する特定の方法で動作することがわかっている Web ページをセットアップできます。各テスト スイート/一括自動化プロジェクトが実行される前に、キャリブレーション スイートが呼び出され、ブラウザー、ファイル マネージャーなど、すべてが期待どおりに機能していることを確認します。

于 2013-09-20T19:01:01.357 に答える
0

Java 開発者として (これが多くの sikuli ユーザーに当てはまるかどうかはわかりません): 私は独自の実装を作成しました。デフォルトのディレクトリ (リソース、パターン、スクリーンショット) のメソッドを持つシングルトン FileDirectory オブジェクトを作成しました。そして、sikuli にスクリーンショットを撮ってもらうときはいつでも、このデフォルト ディレクトリ (起動時に存在しない場合に作成されたディレクトリ) に保存していました。私のアプリケーションは、スクリーンショットをログに記録します。HTML ロガーを使用して、スクリーンショット ディレクトリにリンクできました。そのため、私の html ログには、アプリケーションが撮影した画像へのリンクが埋め込まれていました。

最初は難しいと思われるかもしれませんが、最終的には必要なユースケースを正確に提供することができました。

于 2014-10-10T15:38:14.770 に答える
0

多分これはあなたにいくつかのアイデアを与えるでしょう。
特定の画像を探す必要がある複数の定義を持つファイルがあります。
検索する必要がある画像は、ブラウザーによって異なる場合があります。
だから私はこのようなものを使用します:

ファイル: ImageLib.sikuli

browser_Windows_Firefox = ("windowsFox.png")
browser_Mac_Firefox = ("macFox.png")

ファイル: Execute.sikuli

from ImageLib import *

# Variable you can get set somewhere 
operatingSystem = 'Mac'

image = ()
if (operatingSystem == 'Windows'):
    image = browser_Windows_Firefox
elif (operatingSystem == 'Mac'):
    image = browser_Mac_Firefox
else:
    # Unknow option here.... 
    pass

# Find and highlight it. 
imageLoc = find(image)
imageLoc.highlight(5)
于 2015-08-14T12:47:05.767 に答える