テスターですが何か?

ホビープログラマ略してHPです

Watin入門(2) –TextBox, Button –

leave a comment »

Watin入門連載の第2回です。今回はTextBoxとButtonの操作を行います。

 

想定するWebページ


Googleトップページです、検索キーワードの入力にTextBox操作を、検索実行にButton操作を行います。

image

 

TextBox操作


Googleの検索条件入力テキストボックスのHTMLソースは以下のようになっています。

<input autocomplete=off maxlength=2048 name=q class="lst" title="Google 検索" value="" size=57>

つまり、name属性の値は”q”です。このテキストボックスに「Watin」という文字列を入力するプログラムは以下のようになります。

var Browser = new IE(http://wwww.google.co.jp");

Browser.TextField(Find.ByName("q")).TypeText("Watin);

 

このプログラムの解説をすると、HTMLで<input type=”text”>(または、type指定を省略)したテキストボックスに入力するためには、TextField型にFind.ByName(Name属性値)を指定し、TypeTextメソッドで入力値を指定します。このサンプルではname属性値を指定していますが、id属性値を指定する場合は

Browser.TextField(Find.ById("q")).TypeText("Watin");

 

となります。(Googleの検索条件テキストボックスには、Id属性値が指定されていないので、例外が発生します)Find.ByXXXXにはいろいろな属性を指定できるので、IntelliSenseで確認して下さい。(NameとId以外は使うことはあまりないと思いますが)

次にName属性値が同じテキストボックスが複数ある場合、つまり、name=qのテキストボックスが複数存在する場合は、TextFields型のFilterメソッドを使用して以下のように指定します。この場合はName属性値がqのHTML上1番目に登場するテキストボックスに値を入力します。

Browser.TextFields.Filter(Find.ByName("q"))[0].TypeText("Watin");

 

あまりないとは思いますが...idもnameもわからない場合は以下のような指定をします。この例ではHTML上最初に登場するテキストボックスに値を入力します。

Browser.TextFields[4].TypeText("Watin");

 

少々まどろっこしいですが、以下のような記述も可能です。ループで画面内のTextFiels(たぶんhiddenも含む)を探して、Name属性値がqであればテキストボックスに入力するというものです。

foreach (var text in Browser.TextFields)
{
    if (text.Name == "q")
     {
         text.TypeText("Watin");
     }
}

 

入力値の取得はValueプロパティ使用して行います。

var Value = Browser.TextField(Find.ByName("q")).Value;

 

Find.ByXXXXで指定したテキストボックスが存在しない場合、「ElementNotFoundException」が発生します。HTML上にテキストボックスが存在するかどうか分からない場合、Existsプロパティを使用して判断することができます。Ifステートメントと合わせて使用するケースが想定されます。

var IsExists = Browser.TextField(Find.ByName("q")).Exists;

 

他にも、ReadOnlyやEnabled属性値もこのようにチェックすることができます。

var IsReadonly = Browser.TextField(Find.ByName("q")).ReadOnly;

var IsEnabled = Browser.TextField(Find.ByName("q")).Enabled;

 

以上がテキストボックスの説明になります。Find.ByXXXXやFilter、Value, Exists, ReadOnly, Enabledプロパティの使用方法は他のHTMLオブジェクト(Button, CheckBoxなど)共通になります。この基本さえ理解できていれば他のオブジェクトも同様に操作することができます。

 

Button操作


次はボタン操作です。Googleの検索ボタンのHTMLは以下のようになっています。

<input name="btnG" class="lsb" type="submit" value="Google 検索"/>

で、これをクリックするためには以下のようなコードになります。

Browser.Button(Find.ByName("btnG")).Click();

 

Find.ByNameでオブジェクトを特定するのはテキストボックスと同じです、今回はボタンなのでClickメソッドを呼び出します。Googleの検索ボタンはtype=”submit”ですが、type=”button”でも同じ記述でクリックすることができます。ボタンの場合はvalue属性値を指定してオブジェクトを特定するケースも考えられます、こちらの記述の方が直感的かもしれません。

Browser.Button(Find.ByValue("Google 検索")).Click();

 

Exists, Enabledプロパティもテキストボックスと同様に使用することができます。

var IsExists = Browser.Button(Find.ByName("btnG")).Exists;

var IsEnabled = Browser.Button(Find.ByName("btnG")).Enabled;

 

HTML上inputタグを指定していますが、ソースに画像を指定している場合があります。具体的には以下のようなケースです。

<input type="image" src="/image/search.jpg" alt="検索">

このオブジェクトをクリックするためには、Button型ではなく、Image型を使用します、以下のようなコードになります。

Browser.Image(Find.BySrc(“http://hogehoge/image/seach.jpg”)).Click();

ポイントは以下の3点です。

  • Image型を使用する
  • Find.BySrcでオブジェクトを特定
  • src属性値を絶対パスで指定する

 

今回の内容はここまでです。次回はリンク・画像のクリック操作を行います。

今回紹介したGoogleで検索を行うソースはSkyDriveにあげておきます、C#VBそれぞれ作成したので興味ある人はダウンロードしてください。

Written by david9142

2011年3月9日 @ 1:21 AM

カテゴリー: Watin

Tagged with , ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。