Testorionとは
	Webブラウザを用いるテストを自動化するためのアプリです。
	Excelで作成したテスト仕様書に従って動くため、テスト仕様書作成～実施まで
	一気通貫した効率の良いテストサイクルを手助けします。

利用要件
	・Microsoft Excelがインストールされている必要があります。

ライセンス
	Copyright (c) 2026 シュン・アローザル
	本ソフトウェア（以下「本ソフト」）は、
	個人または法人により無償で使用することができます。
	ただし、以下の行為を禁止します。
		・本ソフトの全部または一部を、作者の許可なく再配布すること
		・本ソフトを改変したものを配布すること
		・本ソフトを第三者に販売または貸与すること
	本ソフトは現状有姿（AS IS）で提供されます。
	本ソフトの使用または使用不能により生じたいかなる損害についても、
	作者は一切の責任を負わないものとします。

セットアップ
	・Playwright用ブラウザを追加でインストールする必要があります。
		下記の手順で行ってください
			・スタートから「powershell」と入力し、Windows PowerShellを管理者権限で実行してください
			・以下のコマンドを実行し、「y」を入力してエンターを押下してください。
				Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
			・cdコマンドで「Testorion v1.0.0」のフォルダまで移動してください
				例：cd "C:\Testorion v1.0.0"
			・以下のコマンドを実行してください
				./playwright.ps1 install
		上記手順を行わずにテストを行おうとすると、下記のようなエラーがログエリアに表示されます
			[2025-08-09 00:00:00] エラーが発生し、ブラウザを開けませんでした|Executable doesn't exist at C:\Users\xxx\AppData\Local\ms-playwright\chromium-1181\chrome-win\chrome.exe

GUIの説明
	[仕様書を選択する]ボタン
		エクセル形式のテスト仕様書を選択します。
		仕様書を別途開いていると、読み取り専用になり、結果の記入ができないため、
		他のアプリでは開いていない状態にしてください。
	[形式チェック]ボタン
		テストを開始する前に、仕様書にエラーが無いかを確認できます。
	[エビデンスフォルダを選択する]ボタン
		エビデンスを格納するフォルダを選択できます。
		仕様書を選択すると時点で自動的に決定されますが、
		ボタン押下から手動で設定することも可能です。
	[エンジン]選択リスト
		ブラウザの種類を選択します。
		例えば、EdgeやChromeに近いものはChromiumになります。
	[お試し起動]ボタン
		指定したブラウザエンジンでブラウザを開きます。
		手動で特定のURLに遷移したり、上手く行かなかったテストの検証が可能です。
	[開始]ボタン
		テストを開始します。
	[停止]ボタン
		テストを停止します。
		実行中のテストケースは最後まで実施され、次のテストケースを実行する前に停止します。
	[デバッグから再開]ボタン
		デバッグモードは、v1.0.0時点では単なる一時停止です。
		一時停止させることで、手動で要素を右クリック→検証
		などでソースを確認したり、コンソールでクエリセレクタがヒットするかどうかの
		確認を行うなど、デバッグ作業が可能です。
	再テストモード の選択リスト
		テストを再実施する際に、「未実施」「OK以外」「すべて」
		に絞ってテスト対象とすることが可能です。
		またこれにより中断したテストを途中から再開することが可能になります。
	[テスト実施中は最前面に表示]チェックボックス
		テスト中に、アプリがブラウザや仕様書で隠れるのを防ぎます。
		これによりテスト中にログを目視することが可能です。
	[ブラウザとエクセルを可視化]チェックボックス
		ブラウザとエクセルを可視化します。
		※非表示にした場合、挙動が変わり、NGになる事象が確認されています。
			そのため表示させた状態のテストを推奨します。
	[NG発生時にデバッグモードに入る]チェックボックス
		NG発生時に、上記のデバッグモードに移行します。
		ブラウザは開いたままとなり、例えばブラウザコンソールで
		クエリセレクタを試し、要素が見つからなかった原因の調査などが可能です。
	ブラウザサイズ 数値欄
		このサイズでブラウザを起動します。
		レスポンシブルデザインの場合、サイズによってメニューが非表示になったり、
		スマートホン用レイアウトに変わる可能性があります。
	タイムアウト 数値欄
		後述の、何かを待つ命令などで、最長何秒待ち、時間が切れるとテストをNGとして扱うかを指定します。

エクセル仕様書のフォーマット
	シート
		ケース
			テストケースを記載します。
			シート名は変更できません。
		テキストテンプレート
			ケースやアクションテンプレートで何度も使いたいクエリセレクタやID・パスワードなどの定型文を指定します。
			シート名は変更できません。
		アクションテンプレート
			ケースで何度も使いたい命令を定義し、使いまわすことができます。
			シート名は変更できません。
	[ケース]シート
		最初の５列がアプリ用(指定列)です。後ろに備考列など、自由に付け加えることができます(自由列)。
		ID, アクション, タイムスタンプ, 結果, 結果詳細　の列があります。
		ID 列
			テストケースを識別するための数値や文字列を記入します。
			0001～9999などの数値から、「h6E8Bvi」のようなランダム文字列も指定可能です。
			後述のエビデンスのサブフォルダ名が「20250809_000000_377_h6E8Bvi」のようになり、
			テストケースとエビデンスを照合するために使います。
			頻繁にテストケースが挿入追加される場合は、ランダム文字列を用いるとIDのズレを防ぐことができます。
		アクション 列
			テストの手順を記載します。
			１行１行をステップと呼び、ステップには１つの命令が含まれます。
			ひとつのセルに複数のステップを、改行区切りで記載します。改行はAlt+Enterで入力できます。
		タイムスタンプ、結果、結果詳細 列
			アプリがテストを実行すると、その時間、結果(OK or NG or ERROR)、NG理由などを
			それぞれの列に記入し、その都度仕様書エクセルを上書き保存します。
		※テストケースの実行順序と終端の検知
			・テストケースは上から順番に実行されます。
			・テストは、IDが空欄の列を検知すると終了します。
			・IDに値があっても、アクションが空欄である場合、終了します。
	[テキストテンプレート]シート
		ケースシートやアクションテンプレートシートで使いまわしたい文字列を記載します。
		名前, テキスト　列があります。
		参照するための名前と、実際のテキストをそれぞれ記載してください。
		名前に使用できる文字は
			・半角英数字
			・アンダースコア(_)
			・ハイフン(-)
			・ドット(.)
		です。先頭は半角英数字にしてください。
	[アクションテンプレート]シート
		ケースシートで使いまわしたいアクションを記載します。
		名前, アクション　列があります。
		参照するための名前と、実際のアクションをそれぞれ記載してください。
		アクションは、ケースシートのアクションと同じ記載ルールです。
		アクション内から別のアクションを呼び出すことも可能です。
		アクションから同じアクションを呼ぶなどの循環参照を行うと、
		処理が終わらなくなるためご注意ください。
		名前に使用できる文字は
			・半角英数字
			・アンダースコア(_)
			・ハイフン(-)
			・ドット(.)
		です。先頭は半角英数字にしてください。

ステップの書式
	ステップとは、アクションに記載した内容のさらに１行ずつの細かい単位です。
	関数のような形式で記載します。
		(例)waitVisible(querySelectorSubmitButton, "送信")

	・引数が無い命令
		(例) abcde()
		後ろに「()」を付加してください。
	・引数に文字列を指定する場合
		(例) abcde("the text")
		半角のダブルクォーテーションで囲ってください。
		v1.0.0では、ダブルクォーテーション内部にダブルクォーテーションを用いることはできません。
		(構文エラーとなる例) abcde("the text is "ABCDE" which means...")
		クエリセレクター内でクォーテーションを用いる場合はシングルクォーテーションを用いてください。
		(例) target("input[type='password']")
	・引数に、テキストテンプレートで登録した値を指定する場合
		(例) abcde(textTemplateName)
		クォーテーションで囲わずに、テキストテンプレート名をそのまま記載してください。
	・アクションテンプレートを呼び出す場合
		(例) action.abcde()
		アクションテンプレートで定義したアクションはすべて「action.」につなげる形で
		呼び出します。アクションに引数を定義することは出来ないため、末尾は常に「()」となります。
	よくある間違い
		・引数の数値は文字列扱いです
			×wait(2000)
			◎wait("2000")
			クォーテーションが無いものはテキストテンプレートとみなすため、
			数値表記であってもダブルクォーテーションで囲って下さい。

ステップに用いる命令の一覧
	goto(text)
		textをURLとして解釈し、直接遷移します。
		テストケース冒頭の、ログイン画面への遷移などに使用します。
	wait(milliseconds)
		millisecondsミリ秒だけ待機します。
		UIで指定したタイムアウト(ミリ秒)を経過するとNG扱いとなります。
	waitVisible(querySelector, [任意]text)
		querySelectorに合致する要素が可視化されるまで待機します。
		textを指定した場合、要素のテキストがtextに完全一致するものを選出します。
		UIで指定したタイムアウト(ミリ秒)を経過するとNG扱いとなります。
	waitAttached(querySelector, [任意]text)
		querySelectorに合致する要素が現れるまで待機します。
		要素は可視化されている必要はありません。(display:none 等も可)
		textを指定した場合、要素のテキストがtextに完全一致するものを選出します。
		UIで指定したタイムアウト(ミリ秒)を経過するとNG扱いとなります。
	waitExistsHtml(text)
		HTMLにtextが現れるまで待機します。
	target(querySelector, [任意]text)
		querySelectorに合致する要素を「現在のターゲット要素」として保持します。
		textを指定した場合、要素のテキストがtextに完全一致するものを選出します。
		要素は単一に定まる必要があり、ヒットしない場合および複数ヒットする場合はNGとなります。
		※本関数は、あらかじめwaitVisible同等の、可視化を待つ処理を行います。
			これは後続ステップでclickやtypeを用いることが多いためです。
			このため、targetの直前にwaitVisibleを用いて待機させる必要はありません。
			(例) 下記のように省略できます。
				goto　→　wait～系　→　target
					↓↓↓
				goto　→　target
	click()
		現在のターゲット要素をクリックします。
		非表示の要素はクリックすることができません。
	type(text)
		現在のターゲット要素にtextをタイピングで打ち込みます。
		非表示の要素へ入力することはできません。
	urlIncludes(text)
		現在のURLにtextが含まれることを確認します。
	debug()
		「デバッグから再開」ボタンが押されるまで一時停止します。
		この間、監督者は表示されたままのブラウザのソースを見たり、デバッグコンソールからクエリセレクタ―を試すことが出来ます。

エビデンス
	エビデンスは自動的に収集されます。フォルダ構成は下記のとおりです。
	(例)テスト仕様書のファイル名が「仕様書.xlsx」の場合
		仕様書.xlsx_エビデンス
			┗20250809_120000_123_00000001
				┗20250809_120001_789_指定のURLへ直接遷移します.png
			┗20250809_120005_456_00000002
	エビデンスルートフォルダ名は、仕様書選択時に自動的に決定されます。
	エビデンスサブフォルダ名は、日付、時間、ミリ秒に加え、テストケースIDが付加されます。
	エビデンスファイル名は、日付、時間、ミリ秒に加え、簡単な説明が付加されます。
	撮影のタイミングは命令ごとに異なります。下記にその一覧を示します。
	下記以外の命令では、エビデンスを取得しません。
		target
			・ターゲット要素が見つかった場合、その要素の画像を取得します。
			・ターゲットが見つからない場合、全体の画像と、HTMLソースを取得します。
			・ターゲットが一意に定まらない場合、全体の画像と、HTMLソースを取得します。
		click
			・クリックする対象の要素の画像を取得します。
		type
			・入力する対象の要素の画像を取得します。
		waitVisible
			・要素が見つかった場合、全体の画像を取得します。
			・要素が見つからなかった場合、全体の画像と、HTMLソースを取得します。
		waitAttached
			・要素が見つかった場合、全体の画像を取得します。
			・要素が見つからなかった場合、全体の画像と、HTMLソースを取得します。
		waitExistsHtml
			・文字列が見つかった場合、全体の画像と、該当部分のHTMLソースを取得します。
			・文字列が見つからなかった場合、全体の画像と、HTMLソースを取得します。

注意事項
	・テスト仕様書にはユーザ名・パスワードが記載されることが予想されます。
		機密情報が漏洩しないよう、取り扱いにご注意ください

作者の連絡先
	・バグやご不明点、導入支援のご依頼などは下記メールアドレスからお知らせ下さい。
		arousal.shun@gmail.com

