言語ローカリゼーションテスト
多くのEggplant Functionalの顧客は、開発したスクリプトを複数の言語でテストする要件を持っています。光学文字認識(OCR)は、Eggplant Functionalの強力な機能であり、数十の言語でテキスト認識を容易にし、ローカリゼーションテストを大幅に簡素化します。では、Eggplant Functionalの顧客はどのようにして、開発したスクリプトを任意の言語でテストできる一つの自動化スクリプトを作成できるのでしょうか?さらに、OCRはまだすべての言語をサポートしていません。では、Eggplant Functionalの顧客は、OCRだけでなく画像も利用することで、サポートされていない言語でもテストできるスクリプトをどのように作成できるのでしょうか?以下に、これがどのように可能であるかを示す例をいくつか紹介します。
この記事で説明する方法は、以下のものが整っていることを前提としています:
- テストする必要のある各言語でOCRサポートがある場合、検証が必要なすべての文字列の翻訳を含むローカリゼーションデータファイルを維持します。以下の例では、ローカリゼーションデータファイルはUTF8エンコーディングを使用していると仮定しています。
- OCRがサポートしていない各言語については、検証が必要な各文字列の画像の別のスイートを維持します。
翻訳スクリプト
Translateスクリプトは、テストスクリプトから渡されるプロパティリストを処理し、Languageグローバル変数内の言語名に応じて必要なOCR検索または画像検索に変換します。
例:
#Translate
params ImagePropertyList // テストスクリプトから渡されたプロパティリストを受け取ります。
global Translator
global Language
// OCR言 語のリストを管理します。これらの言語のそれぞれに対して、翻訳のローカリゼーションデータファイルが必要です。
set OCRLanguages to ("Spanish","English")
// 画像のみの言語(OCRサポートなし)のリストを管理します。これらの言語のそれぞれに対して、画像のスイートが必要です。
set ImageLanguages to ("Hebrew","Tongan")
// 検索がOCRを使用するか、画像を使用するかを決定します。
if Language is among the items of OCRLanguages
set Type to "text"
set IsOCRLanguage to true
set WordtoTranslate to ImagePropertyList's Name
else if Language is among the items of ImageLanguages
set Type to "image"
set TranslatedWord to ImagePropertyList's Name
if the InitialSuites is not Language then set the InitialSuites to Language //InitialSuitesグローバルプロパティを使用して、テストスクリプトを指定言語の画像スイートに指向させます。コードは、スイートが言語と同じ名前を持っている(つまり、"Hebrew")と仮定します。
else
throw "Language global variable value problem", "Language is not defined as OCR or image language."
end if
// 現在の言語に対して翻訳された文字列のプロパティリストがまだ存在しない場合、それを作成します。
if IsOCRLanguage is true and if Translator.(Language) is empty then
put file resourcePath(Language&".txt") into LocalizationData
// Spanish.txtという名前のLocalizationDataファイルの例の内容。スイートリソースに保存されます。
//PaperSize,Tamaño de papel
//InkColor,Color de tinta
repeat with each line Translation of LocalizationData
put the trim of item 1 of Translation into ElementName
put the trim of item 2 of Translation into String
set Dictionary.(ElementName) to String
end repeat
set Translator.(Language) to Dictionary
end if
if IsOCRLanguage is true then put Translator.(Language).(WordToTranslate) into TranslatedWord // 翻訳リストのプロパティリストから要素の翻訳を取得し、現在の言語がOCR言語である場合のみ実行します。
set ImagePropertyList to ((type):TranslatedWord) adding properties of imagePropertyList // テストスクリプトから渡された元のプロパティリストと、検索が画像を使用するかOCRを使用するかを指定するプロパティを組み合わせます。
remove property ("name") from ImagePropertyList // プロパティリストを整理して、現在は冗長なname:プロパティを削除します。
if IsOCRLanguage is true then add property (Language:(Language)) to ImagePropertyList // 言語がOCR言語である場合、OCR language:プロパティと値を追加します。
return ImagePropertyList // 新しい画像またはOCRプロパティリストをテストスクリプトの元の検索に戻します。
テストスクリプトコード
以下の例に示すように、コードを使用してテストスクリプトを作成します。このローカライズテストスクリプトは、通常のスクリプトと非常によく似ていますが、Translateスクリプトへの参照が追加されています。Translateスクリプトは、渡された画像またはOCRプロパティリストを処理し、Languageグローバル変数の言語名に基づいて検索する適切な画像またはOCR文字列を決定し、新しい画像またはOCRプロパティリストをテストスクリプトに返します。
例:
params Environment // テストする必要のある言語の名前を受け取ります。
// グローバル変数を使用すると、変数の値をテストスクリプトとTranslateスクリプトの間で簡単に複数回渡すことができます。
global Translator
global Language
set Language to Environment
set the InitialSuites to empty // 実行の始まりにInitialSuitesをリセットします - ローカライズ画像ライブラリ以外のものにInitialSuitesを使用していないと仮定します。
WaitFor 10, Translate (name:"Inkcolor", searchRectangle:("PrinterSettings_Header","OK_Button")) //"InkColor"は、画像スイートの画像の名前であるか、ローカライズデータファイルで使用されます。
WaitFor 10, Translate (name:"PaperSize") // Translateスクリプトは、画面上で識別したい要素を参照する際にname:プロパティの使用を期待しています。
Click Translate (name:"TrayNumber", waitfor:25)