package jp.sourceforge.cfneo.at4ie.api;

import java.util.Map;


/**
 * テスト対象となるブラウザのインターフェイス。
 * @author imaitakafumi
 *
 */
public interface TargetBrowser {

	/**
	 * ブラウザが開かれているかどうかを判定する。
	 */
	public boolean isOpened();
	/**
	 * ブラウザを開く。
	 */
	public void openWindow();
	/**
	 * ブラウザに指定されたURLにアクセスさせる。
	 * @param url
	 */
	public void open(String url);
	/**
	 * ブラウザを閉じる。
	 */
	public void closeWindow();
	/**
	 * 現在のページのタイトルを取得する。
	 * @return
	 */
	public String getScreenTitle();
	/**
	 * 現在のページに最初に出てくるボタンを押す。
	 */
	public void clickButton();
	/**
	 * 指定したname属性と合致するボタンを押す。
	 * @param name
	 */
	public void clickButtonByName(String name);
	/**
	 * 指定したid属性と合致するボタンを押す。
	 * @param id
	 */
	public void clickButtonById(String id);
	/**
	 * 現在のページに最初に出てくるSubmitボタンを押す。
	 */
	public void clickSubmit();
	/**
	 * 指定したid属性と合致するSubmitボタンを押す。
	 * @param id
	 */
	public void clickSubmitById(String id);
	/**
	 * 指定したname属性と合致するSubmitボタンを押す。
	 * @param name
	 */
	public void clickSubmitByName(String name);
	/**
	 * 指定したid属性と合致するLinkを押す。
	 * @param id
	 */
	public void clickLinkById(String id);
	/**
	 * 指定したname属性と合致するLinkを押す。
	 * @param name
	 */
	public void clickLinkByName(String name);
	/**
	 * 指定したURL(href属性)と合致するLinkを押す。
	 * @param url
	 */
	public void clickLinkByUrl(String url);
	/**
	 * 指定したid属性と合致するUIコンポーネントにvalueをセットする。
	 * @param id
	 * @param value
	 */
	public void setValueById(String id, String value);
	/**
	 * 指定したname属性と合致するUIコンポーネントにvalueをセットする。
	 * @param name
	 * @param value
	 */
	public void setValueByName(String name, String value);
	/**
	 * 指定したid属性と合致するUIコンポーネントのvalueを取得する。
	 * @param id
	 * @return
	 */
	public String getValueById(String id);
	/**
	 * 指定したname属性と合致するUIコンポーネントのvalueを取得する。
	 * @param name
	 * @return
	 */
	public String getValueByName(String name);
	/**
	 * 指定したid属性と合致するUIコンポーネントのtextを取得する。
	 * @param id
	 * @return
	 */
	public String getTextById(String id);
	/**
	 * 指定したname属性と合致するUIコンポーネントのtextを取得する。
	 * @param name
	 * @return
	 */
	public String getTextByName(String name);
	/**
	 * 指定したid属性と合致するTextに値valueを入力する。
	 * @param id
	 * @param value
	 */
	public void typeById(String id, String value);
	/**
	 * 指定したname属性と合致するTextに値valueを入力する。
	 * @param name
	 * @param value
	 */
	public void typeByName(String name, String value);
	/**
	 * 指定したid属性と合致するTextを取得する。
	 * @param id
	 * @return
	 */
	public String getTextValueById(String id);
	/**
	 * 指定したname属性と合致するTextを取得する。
	 * @param name
	 * @return
	 */
	public String getTextValueByName(String name);
	/**
	 * 指定したid属性と合致する隠し項目を取得する。
	 * @param id
	 * @return
	 */
	public String getHiddenValueById(String id);
	/**
	 * 指定したname属性と合致する隠し項目を取得する。
	 * @param name
	 * @return
	 */
	public String getHiddenValueByName(String name);
	/**
	 * 指定したid属性と合致するselectコンポーネントの指定した値を選択する。
	 * @param id
	 * @param selectValue
	 */
	public void selectById(String id ,String selectValue);
	/**
	 * 指定したname属性と合致するselectコンポーネントの指定した値を選択する。
	 * @param name
	 * @param selectValue
	 */
	public void selectByName(String name, String selectValue);
	/**
	 * 指定したid属性と合致するselectコンポーネントの値の一覧を取得する。
	 * @param id
	 * @return
	 */
	public Map<String, String> getSelectListById(String id);
	/**
	 * 指定したname属性と合致するselectコンポーネントの値の一覧を取得する。
	 * @param name
	 * @return
	 */
	public Map<String, String> getSelectListByName(String name);
	/**
	 * 指定したid属性と合致するselectコンポーネントの選択されている値を取得する。
	 * @param id
	 * @return
	 */
	public String getSelectedValueById(String id);
	/**
	 * 指定したname属性と合致するselectコンポーネントの選択されている値を取得する。
	 * @param name
	 * @return
	 */
	public String getSelectedValueByName(String name);

	/**
	 * アラートダイアログのOKボタンを押す。
	 */
	public void clickAlertDialogOk();
	/**
	 * アラートダイアログのテキストを取得する。
	 * @return
	 */
	public String getAlertDialogText();

	/**
	 * 現在のページのURLを取得する。
	 * @return
	 */
	public String getCurrentUrl();
	/**
	 * ブラウザの「戻る」ボタンを押す。
	 */
	public void pushBrowserBack();
	/**
	 * ブラウザの「次へ」ボタンを押す。
	 */
	public void pushBrowserNext();

	// TODO ここにあるのは何か違う気がする。
	/**
	 * 現在のページを指定されたファイル・パス(filepath)にスクリーンショットとして保存する。
	 */
	public void saveScreenShot(String filepath);

}
