Topics & News
マピオンラボリニューアルしました。

Mapion マピオンラボ テスト マスタリングSelenese!

マスタリングSelenese!

こんにちは、中村です。

Seleniumについて前回前々回と紹介しましたが、今回はその操作コマンドであるSeleneseについてまとめてみました。コマンドの数だけみると300超(?もっとあるかも)あるSeleneseコマンドですが、カテゴリ分けすることで体系的に理解することができそうです。自分への備忘録も兼ねてエントリーしてみたいと思います。

まずコマンドは大きく3つ、「アクション」「アクセサ」「アサーション」に分類されます。

アクション(Actions)

主にブラウザ操作などを行なうコマンドです。ウィンドウオープンや特定要素へのマウスイベント、テキスト入力などユーザーが行なう操作の多くが可能です。

open, click, type, ...

またほとんどのアクションには「~AndWait」というコマンドが用意されており、アクション後に発生するページ遷移のロード完了を待つことが可能です。

openAndWait, clickAndWait, typeAndWait, ...

アクセサ(Accessors)

特定要素の属性値や状態の取得などを行ないます。一時変数に値を保持し、後で検証時に利用するなどが可能です。

storeText, storeTitle, storeVisible, storeTable, ...

アサーション(Assertions)

値や状態の検証を行ないます。

assertText, assertTitle, verifyVisible, verifyTable, ...

アサーションには「assert~」で始まるものと「verify~」で始まる同じコマンドが用意されており、検証に失敗した時の挙動が異なります。「assert~」で検証失敗するとただちにテストが中断されますが、「verify~」で検証失敗するとログ出力は行なわれますがテストは中断されません。

要素の特定(Locators)

多くのアクセサとアサーションでは要素を特定する必要があります。Seleneseにおける要素指定は多くの方法が提供されており、通常、

locatorType=argument

の形で記述します。locatorTypeには以下種類があります。

  • id(identifier)
  • 要素のid属性で指定します。

    id=hoge
  • name
  • 要素のname属性で指定します。複数該当する場合は最初の要素が返されます。

    name=hoge
  • dom
  • JavaScript式によるアクセスを行ないます。

    dom=document.forms['myForm'].myDropdown
  • xpath
  • xpath式によるアクセスを行ないます。

    xpath=//img[@alt='The image alt text']
  • link
  • aタグ内のテキストパターンでアクセスします。

    link=TOPへのリンク
  • css
  • cssセレクターによるアクセスを行ないます。

    css=div #header

locatorTypeを省略した場合、「document.~」であればdomとみなし、「//~」であればxpathとみなし、それ以外であればidとみなして処理されます。

アクセサで保持した値の参照

「store~」では取得した値を任意の変数に格納することができ、後で参照できます。参照するときは「${変数名}」でアクセスします。以下では「domain」という変数名に値を格納し、格納した値を使ってverifyTextを行なう例です。

storelabs.mapion.co.jpdomain
verifyText//div/p${domain}

またJavaScript式内において「$javascript{storedVars['変数名']}」でもアクセスすることができます。JavaScript式については後述。

storelabs.mapion.co.jp$javascript{storedVars['domain']}

JavaScript式

「javascript{~}」と記述することでJavaScript式が記述でき、最後に評価した式の値が返されます。なお、このスクリプトの実行スコープはHTMLドキュメントではない点に注意してください。

javascript{var a=1,b=2;a+b;} // 3が値として評価される

storeした複数の値を使ってごにょごにょ、、、みたいなことも出来なくはありませんね。

それでは以下に、カテゴリ分けした実際のコマンドをリスティングしてみます。コマンド名で分かるものについては説明を割愛しています。詳細はSelenium Coreのダウンロードに含まれる「reference.html」を参照してください。

マウス操作

「~At」のコマンドはマウスイベントが発生した座標も併せて指定します。

  • click(locator)
  • clickAt(locator,coordString)
  • doubleClick(locator)
  • doubleClickAt(locator,coordString)
  • mouseDown(locator)
  • mouseDownAt(locator,coordString)
  • mouseDownRight(locator)
  • mouseDownRightAt(locator,coordString)
  • mouseMove(locator)
  • mouseMoveAt(locator,coordString)
  • mouseOut(locator)
  • mouseOver(locator)
  • mouseUp(locator)
  • mouseUpAt(locator,coordString)
  • mouseUpRight(locator)
  • mouseUpRightAt(locator,coordString)
  • contextMenu(locator)
  • contextMenuAt(locator,coordString)

キーボード操作

  • altKeyDown()
  • altKeyUp()
  • controlKeyDown()
  • controlKeyUp()
  • metaKeyDown()
  • metaKeyUp()
  • shiftKeyDown()
  • shiftKeyUp()
  • keyDown(locator,keySequence)
  • keyPress(locator,keySequence)
  • keyUp(locator,keySequence)

マウス操作(ドラッグ&ドロップ)

  • dragAndDrop(locator,movementsString)
  • dragAndDropToObject(locatorOfObjectToBeDragged,locatorOfDragDestinationObject)
  • dragdrop(locator,movementsString)
  • setMouseSpeed(pixels)
  • ドラッグ&ドロップ時のマウススピードを設定

Window操作

  • open(url)
  • openWindow(url,windowID)
  • selectFrame(locator)
  • selectPopUp(windowID)
  • selectWindow(windowID)
  • deselectPopUp()
  • close()
  • goBack()
  • refresh()
  • windowFocus()
  • windowMaximize()

テキスト入力&フォーム操作

  • focus(locator)
  • 指定した要素がフォーカスを取得する

  • setCursorPosition(locator,position)
  • テキスト入力におけるカーソル位置を指定

  • type(locator,value)
  • 文字入力

  • typeKeys(locator,value)
  • 1文字毎の文字入力

  • addSelection(locator,optionLocator)
  • multi-select boxでの複数選択を行なう

  • removeSelection(locator,optionLocator)
  • multi-select boxでの選択解除

  • removeAllSelections(locator)
  • multi-select boxでのすべての選択解除

  • check(locator)
  • checkbox/radioをチェックする

  • uncheck(locator)
  • checkbox/radioをアンチェックする

  • select(selectLocator,optionLocator)
  • ドロップダウンリストからの選択を行なう

  • submit(formLocator)
  • フォームのサブミット

クッキー操作

  • createCookie(nameValuePair,optionsString)
  • deleteAllVisibleCookies()
  • deleteCookie(name,optionsString)

画面キャプチャ

  • captureEntirePageScreenshot(filename,kwargs)

その他操作

  • waitForPageToLoad(timeout)
  • 現在のページが読み込まれるのを待つ
    「click→waitForPageToLoad」と「clickAndWait」は同じ動作が期待できる

  • waitForPopUp(windowID,timeout)
  • ポップアップウィンドウが読み込まれるのを待つ

  • waitForFrameToLoad(frameAddress,timeout)
  • フレームが読み込まれるのを待つ

  • waitForCondition(script,timeout)
  • スクリプト式の評価結果が真となるまで待つ

  • fireEvent(locator,eventName)
  • onfocusやonblurなどのマウス操作以外のDOMイベントをシミュレートする

  • runScript(script)
  • HTML Documentに指定したソースのscriptタグを追加する

プロンプト操作の設定変更

Seleniumにおけるプロンプトに対する操作はデフォルトで決まっており、それを変更するためのコマンドです。

  • answerOnNextPrompt(answer)
  • 以降のwindow.prompt()における入力内容を指定

  • chooseCancelOnNextConfirmation()
  • 以降のwindow.confirmでキャンセルを選択するように設定
    (デフォルトではOKを選択するように設定されている)

  • chooseOkOnNextConfirmation()
  • 以降のwindow.confirmでOKを選択するように設定
    (chooseCancelOnNextConfirmationで設定したものを戻す)

テスト実行制御

  • setSpeed(value)
  • テスト実行の速度を指定

  • setTimeout(timeout)
  • openとwaitFor~系におけるタイムアウト時間を設定

  • pause(waitTime)
  • 指定ミリ秒テスト実行を待機する

  • break()
  • テスト実行を中断

デバッグ&ちょっと便利なコマンド系

  • echo(message)
  • Seleniumのコンソールに値を出力

  • highlight(locator)
  • 指定した要素のbackgroundColorを黄色に

  • assignId(locator,identifier)
  • 指定した要素にidを振る(その後はそのid名でアクセスできる)

Selenium設定系

  • allowNativeXpath(allow)
  • ブラウザ実装のXPathを利用するかを選択、falseでSeleniumのXPathを利用する

  • useXpathLibrary(libraryName)
  • 指定したxpathライブラリを利用する
    "ajaxslt" or "javascript-xpath" or "default"

  • setBrowserLogLevel(logLevel)
  • ブラウザーログレベルの設定値

その他

  • store(expression,variableName)
  • storeExpressionと同じ

アクセサ&アサーション

以下コマンドの「~」には、

  • assert
  • assertNot
  • verify
  • verifyNot
  • waitFor
  • waitForNot
  • store

のいずれかが指定されます。「~Not」は真偽値逆転。「waitFor(waitForNot)」はその検証が成立するまでテスト実行を待つコマンドです。「store」の場合はpatternではなく格納する変数名を指定します。

  • ~Alert(pattern)
  • window.alert()のメッセージに対する検証/値格納

  • ~AllButtons(pattern)
  • ページ内全てのボタン要素ID(配列)に対する検証/値格納

  • ~AllFields(pattern)
  • ページ内全ての入力フィールド要素ID(配列)に対する検証/値格納

  • ~AllLinks(pattern)
  • ページ内全てのリンク要素ID(配列)に対する検証/値格納

  • ~AllWindowIds(pattern)
  • 全てのウィンドウID(配列)に対する検証/値格納

  • ~AllWindowNames(pattern)
  • 全てのウィンドウname(配列)に対する検証/値格納

  • ~AllWindowTitles(pattern)
  • 全てのウィンドウtitile(配列)に対する検証/値格納

  • ~Attribute(attributeLocator,pattern)
  • 指定要素属性に対する検証/値格納
    <foo bar="hoge"/>
    とあり"hoge"を取得したければlocatorに"foo@bar"と指定

  • ~AttributeFromAllWindows(attributeName,pattern)
  • 全てのウィンドウの特定属性(配列)に対する検証/値格納

  • ~BodyText(pattern)
  • ページの全テキストに対する検証/値格納

  • ~Confirmation(pattern)
  • window.comfirm()のメッセージに対する検証/値格納

  • ~Cookie(pattern)
  • テストページにおける全てのcookieに対する検証/値格納

  • ~CookieByName(name,pattern)
  • テストページにおける特定cookieに対する検証/値格納

  • ~CursorPosition(locator,pattern)
  • テキスト入力におけるカーソル位置に対する検証/値格納

  • ~ElementHeight(locator,pattern)
  • 要素高さに対する検証/値格納

  • ~ElementIndex(locator,pattern)
  • 要素位置番号に対する検証/値格納

  • ~ElementPositionLeft(locator,pattern)
  • 要素の水平位置に対する検証/値格納

  • ~ElementPositionTop(locator,pattern)
  • 要素の垂直位置に対する検証/値格納

  • ~ElementWidth(locator,pattern)
  • 要素幅に対する検証/値格納

  • ~Eval(script,pattern)
  • JavaScriptをevalした結果に対する検証/値格納

  • ~Expression(expression,pattern)
  • 指定した値に対する検証/値格納

  • ~HtmlSource(pattern)
  • html要素のinnerHTMLに対する検証/値格納

  • ~Location(pattern)
  • urlに対する検証/値格納

  • ~MouseSpeed(pattern)
  • dragAndDropにおけるMouseSpeedに対する検証/値格納

  • ~Prompt(pattern)
  • window.prompt()で表示されるメッセージに対する検証/値格納

  • ~SelectedId(selectLocator,pattern)
  • 要素IDに対する検証/値格納

  • ~SelectedIds(selectLocator,pattern)
  • 複数要素ID(配列)に対する検証/値格納

  • ~SelectedIndex(selectLocator,pattern)
  • select要素内で選択されているoption要素番号に対する検証/値格納

  • ~SelectedIndexes(selectLocator,pattern)
  • multi-select要素内で選択されているoption要素番号(配列)に対する検証/値格納

  • ~SelectedLabel(selectLocator,pattern)
  • select要素内で選択されているoption要素ラベルに対する検証/値格納

  • ~SelectedLabels(selectLocator,pattern)
  • multi-select要素内で選択されているoption要素ラベル(配列)に対する検証/値格納

  • ~SelectedValue(selectLocator,pattern)
  • select要素内で選択されているoption要素の値に対する検証/値格納

  • ~SelectedValues(selectLocator,pattern)
  • multi-select要素内で選択されているoption要素の値(配列)に対する検証/値格納

  • ~SelectOptions(selectLocator,pattern)
  • select要素内の全てのoption要素の値に対する検証/値格納

  • ~Speed(pattern)
  • Seleniumの実行速度に対する検証/値格納

  • ~Table(tableCellAddress,pattern)
  • テーブルセル内の値に対する検証/値格納
    locatorには"foo.1.4"などと指定

  • ~Text(locator,pattern)
  • 指定要素のテキストノードに対する検証/値格納

  • ~Title(pattern)
  • ページタイトルに対する検証/値格納

  • ~Value(locator,pattern)
  • input要素のvalue値に対する検証/値格納

  • ~XpathCount(xpath,pattern)
  • xpathにマッチした要素数に対する検証/値格納

  • ~AlertPresent(pattern)
  • alertが発生しているかどうかの結果値(true or false)に対する検証/値格納

  • ~Checked(locator,pattern)
  • checkbox/radioがチェックされているかどうかの値に対する検証/値格納

  • ~ConfirmationPresent(pattern)
  • alertが発生しているかどうかの結果値(true or false)に対する検証/値格納

  • ~CookiePresent(name,pattern)
  • 指定したクッキーの有無(true or false)に対する検証/値格納

  • ~Editable(locator,pattern)
  • inputが入力可能かどうか(true or false)に対する検証/値格納

  • ~ElementPresent(locator,pattern)
  • 要素が存在するかどうか(true or false)に対する検証/値格納

  • ~Ordered(locator1,locator2,pattern)
  • 同じ親を持つ2要素の順序結果(true or false)に対する検証/値格納

  • ~PromptPresent(pattern)
  • promptが発生しているかどうかの結果値(true or false)に対する検証/値格納

  • ~SomethingSelected(selectLocator,pattern)
  • ドロップダウンリストが選択されているかどうかの結果値(true or false)に対する検証/値格納

  • ~TextPresent(pattern,pattern)
  • 指定した文字列パターンがページ中に存在するかどうかの結果値(true or false)に対する検証/値格納

  • ~Visible(locator,pattern)
  • 指定要素が可視状態かどうかの結果値(true or false)に対する検証/値格納

アクセサ&アサーション その他

以下コマンドの「~」には、

  • assert
  • assertNot
  • verify
  • verifyNot
  • waitFor
  • waitForNot

のいずれかが指定されます。

  • ~ErrorOnNext(message)
  • 次assert or verify or waitForコマンドでエラーとなることを期待する

  • ~FailureOnNext(message)
  • 次assert or verify or waitForコマンドで失敗することを期待する

comment
ニックネーム 

大変参考になりました!!GOOD JOB!

カジ:2010.1.08 16:48

trackback

この記事のトラックバックURLhttp://labs.mapion.co.jp/mtos/mt-tb.cgi/31

Mashup Awards 7 (#MA7)
ユーザーアーカイブ