Sikuliチュートリアル:SeleniumでSikuliを使用する方法(例)



Sikuli Tutorial How Use Sikuli With Selenium



このチュートリアルでは、以下について説明します。

シクリとは?

公式ウェブサイトドキュメント: https://sikulix-2014.readthedocs.io/en/latest/index.html
Sikuliは、GUIベースのオープンソース自動化ツールです。これは、Webページの要素と対話し、ウィンドウベースのポップアップウィンドウ(ページ)を処理するために使用されます。 「画像認識」テクノロジーを使用して、Webページのポップアップウィンドウの要素と対話します。 Sikuliは、Webページのすべての要素を画像として扱い、それらの画像に基づいてこれらの要素を認識します。 UI要素が安定していて、頻繁に変更されない場合は、Sikuliが最初の選択肢です。

SikuliとSeleniumWebdriverの統合

Sikuliは、SikuliJARファイルを使用してSeleniumWebdriverと統合できます。
次のシーケンスは、SeleniumWebdriverを使用してSikuliを構成する手順のリストです。



[MavenでJarパッケージを構成する別の方法:]

ステップ1) 次のURLからSikuliJARパッケージをダウンロードします:(sikulixsetup-1.1.3.jarなど)
https://launchpad.net/sikuli/+download
cdm sikulixsetupが配置されているファイルディレクトリを入力し、Jarパッケージを実行します。 java -jar sikulixsetup-1.1.3.jar
ジャー
ジャー
画像
はい
画像
CMD
新しく生成されたjarパッケージを以下に示します。
瓶
ステップ2) 次に、Eclipseで新しいJAVAプロジェクトを作成し、右クリックプロジェクト->ビルドパス->ビルドパスの構成を使用して、JARファイルをビルドパスとSeleniumjarパッケージに追加します。



org.seleniumhq.selenium selenium-java 3.14.0

事業
JARファイルがプロジェクトビルドパスに追加されると、Sikuliが提供するクラスを使用できるようになります。

ヒント:上記の方法に従わないと、実行が失敗し、Sikuliがエラーを報告し続ける可能性があります** [エラー] RunTimeINIT:終了:エクスポートするライブラリが上記のクラスパスに見つかりません:/ sikulixlibs / windows / libs64 **

シクリのクラス画面

Screenクラスは、Sikuliが提供するすべてのメソッドの基本クラスです。 Screenクラスには、クリック、ダブルクリック、テキストボックスへの入力の提供、ホバリングなど、画面要素に対するすべての一般的な操作の定義済みメソッドが含まれています。以下は、Screenクラスによって提供される一般的なメソッドのリストです。



方法 説明 構文
クリック このメソッドは、画像名をパラメータとして使用して画面上の要素をクリックするために使用されます。 Screen s = new Screen()s.click(“ QA.png”)
ダブルクリック このメソッドは、要素をダブルクリックするために使用されます。画像名をパラメータとして受け入れます。 Screen s = new Screen()s.doubleClick(“ QA.png”)
入力を入力します このメソッドは、要素に入力値を提供するために使用されます。画像名とテキストをパラメータとして受け入れます。 s.type(“ QA.png”、“ TEXT”)
ホバー このメソッドは、要素の上にマウスを置くために使用されます。画像名をパラメータとして受け入れます。 s.hover(“ QA.png”)
検索 このメソッドは、画面上の特定の要素を見つけるために使用されます。画像名をパラメータとして受け入れます。 s.find(“ QA.png”)

シクリのパターン

Patternクラスは、画像ファイルを他の属性に関連付けて要素を一意に識別するために使用されます。画像のパスをパラメータとして取ります。
パターンp = new Pattern( '画像のパス')
以下は、パターンクラスの最も一般的に使用されるメソッドです。

方法 説明 構文
getFileName Patternオブジェクトに含まれているファイル名を返します。 パターンp = new Pattern(“ D: Demo QA.png”)文字列ファイル名= p.getFileName()
同様 このメソッドは、類似性が指定された値に設定されている新しいパターンオブジェクトを返します。これは、0と1の間の類似値をパラメーターとして受け入れます。 Sikuliは、指定された同様の範囲に属するすべての要素を検索し、新しいパターンオブジェクトを返します。 パターンp1 = p.similar(0.7f)
正確 このメソッドは、類似度が1に設定された新しいPatternオブジェクトを返します。 完全に一致 パターンp1 = p.exact()

Sikuliを使用してファイルをアップロードするためのコード例

次のコードは、Sikuliを使用してChromeブラウザにファイルをアップロードする方法を説明しています。
//sikuli.script.jarを直接ダウンロードしてインポートしないでください 、上記の方法で生成する必要があります。

package com.morningstar.sikuli import org.openqa.selenium.By import org.openqa.selenium.WebDriver import org.sikuli.script.FindFailed import org.sikuli.script.Pattern import org.sikuli.script.Screen import org.openqa.selenium.chrome.ChromeDriver public class SikuliDemo { public static void main(String[] args) throws FindFailed { System.setProperty('webdriver.chrome.driver', 'resources/Driver/chromedriver.exe') String filepath = 'resources/' String inputFilePath = 'resources/' Screen s = new Screen() Pattern fileInputTextBox = new Pattern(filepath + 'FileTextBox.PNG') Pattern openButton = new Pattern(filepath + 'OpenButton.PNG') WebDriver driver // Open Chrome browser driver = new ChromeDriver() driver.get('http://demo.guru99.com/test/image_upload/index.php') // Click on Browse button and handle windows pop up using Sikuli driver.findElement(By.xpath('.//*[@id='photoimg']')).click() s.wait(fileInputTextBox, 20) s.type(fileInputTextBox, inputFilePath + 'Test.docx') s.click(openButton) // Close the browser driver.close() } }

コードの解釈:
ステップ1)、 最初のステートメントには、chromeのドライバー実行可能パスの設定が含まれます。

System.setProperty('webdriver.chrome.driver', 'D:\ chromedriver.exe')

ステップ2)、 スクリーンショットツールなどのスクリーンショットツールを使用して、ポップアップの「FileTextBox」ボタンと「Open」ボタンのスクリーンショットを撮ります。
画像
スクリーンショットは次のようになります。
画像
Windowsファイル 入力テキストボックス開くボタン 画像は「FileTextBox.PNG」および「OpenButton.PNG」として保存されます。
Sikuliは、画像認識技術を使用して画面上の要素を識別します。画像に基づいて画面上の要素のみを検索します。
例:メモ帳を自動的に開く場合は、メモ帳のデスクトップアイコンの画像をPNGファイルに保存し、シングルクリック操作を実行する必要があります。
上記の例では、 ファイル入力テキストボックス そして、保存された画像を使用して、Windowsポップアップウィンドウのボタンを開きます。 画面の解像度を画像キャプチャからテストスクリプトの実行に変更すると、Sikuliの結果に一貫性がなくなります。したがって、キャプチャした画像と同じ解像度でテストスクリプトを実行することを常にお勧めします。画像のピクセルサイズを変更すると、SikuliはFindFailed例外をスローします。

ステップ3)、 次のステートメントには、ScreenオブジェクトとPatternオブジェクトの作成が含まれます。新しい画面オブジェクトを作成します。アップロードしたファイルのパスをPatternオブジェクトのパラメーターに設定します。

Screen s = new Screen() Pattern fileInputTextBox = new Pattern(filepath + 'FileTextBox.PNG') Pattern openButton = new Pattern(filepath + 'OpenButton.PNG')

ステップ4) 次のステートメントには、Chromeブラウザを使用してURLを開くことが含まれます。 http://demo.guru99.com/test/image_upload/index.php

driver = new ChromeDriver() driver.get('http://demo.guru99.com/test/image_upload/index.php')

上記のURLは、ファイルのアップロード機能を示すデモアプリケーションです。

ステップ5) 次のステートメントを使用するには、[ファイルの選択]ボタンをクリックします

driver.findElement(By.xpath('.//*[@id='photoimg']')).click()

ステップ6) ポップアップウィンドウが表示されるのを待ちます。 Waitメソッドは、参照ボタンをクリックした後のポップアップウィンドウに関連する遅延を処理するために使用されます。

s.wait(fileInputTextBox, 20)

ステップ7) [入力ファイル]テキストボックスにファイルパスを入力し、[開く]ボタンをクリックします

s.type(fileInputTextBox, inputFilePath + 'Test.docx') s.click(openButton)

ステップ8) ブラウザを閉じます

driver.close()

やっと:
最初に、スクリプトはブラウザを開きました
画像
「ファイルの選択」ボタンをクリックすると、Windowsファイルのポップアップウィンドウが表示されます。データ入力ファイルをテキストボックスに入力し、[開く]ボタンをクリックします
画像
ファイルをアップロードしてブラウザを閉じると、次の画面が表示されます
画像
結論として:
Sikuliは、WebページおよびWindowsポップアップウィンドウ上のフラッシュオブジェクトを処理するために使用されます。ユーザーインターフェイスの要素が頻繁に変更されない場合は、Sikuliを使用することをお勧めします。この欠点のため、自動テストの観点から、Sikuliは他のフレームワーク(RobotやAutoITなど)と比較して好みが少なくなっています。

追加ストーリー-----画像検証:

Sikuliは、画像の特定の部分が画像にあるかどうかを識別するために使用できます。全体像に明らかなロゴなどがあるかどうかを確認するなど、非常に便利です。

String imgPath = 'xxxx/image.png' Screen s = new Screen() boolean test = s.exists(imgPath).isValid() System.out.println('########Test======'+test)

または:

String imgPath = 'xxxx/image.png' Screen s = new Screen() Assert.assertTrue(s.exists(imgPath).isValid(), 'can not find the LOGO:' + Page1And16) . . . //Search based on image object public static boolean isExist(String iconPath) throws FindFailed{ boolean isVaild = false pattern = new Pattern(iconPath) screen = new Screen() try { //screen.wait(iconPath, 20) Image image = screen.find(pattern).getImage() System.out.println('########IMAGE===='+image) isVaild = image != null } catch (FindFailed e) { e.printStackTrace() System.err.println(e.getMessage()) } clear() return isVaild } public static void clear(){ if(pattern != null){ pattern = null } if(screen != null){ screen = null } }