2011年11月19日土曜日

seleniumとブラウザにひもづくアドオン

selenium-webdriverでアドオンを同時起動できる。

FireFox限定の場合だとwebdriverのインスタンス生成時に


   File file = new File("firebug-1.8.1.xpi");
   FirefoxProfile firefoxProfile = new FirefoxProfile();
   firefoxProfile.addExtension(file);
   firefoxProfile.setPreference("extensions.firebug.currentVersion", "1.8.1"); // Avoid startup screen

   WebDriver driver = new FirefoxDriver(firefoxProfile);
 
こんな感じ、この例だとfirebugが同時起動される。
choromeでも同じことができたら先日書いたscriptcoverと連携取れるのに、、

selenium2.13がでました

なんだか宣伝員みたいになってます。

いくつかの不具合修正とmacOSX+firefoxの連携上での不具合、およびちょっとした仕様変更がかかりました。

とりあえず笑ったのが
「Screenshots in Python are now working」(いちいち報告しなくても)
あとビビったのが
「Deprecated methods were removed from the FirefoxDriver and FirefoxProfile classes (saveScreenshot, enableNativeEvents, alwaysLoadNoFocusLib).」(saveScreenshot思いっきりつかおうとしてたよ)

とりあえず思ったのがやっぱりいまだにα版なんだなということ。

一番気になったのが
「Exporting webdriver.promise from the Javascript API」
調べたところ、
http://code.google.com/p/selenium/source/browse/trunk/javascript/webdriver-jsapi/test/asserts_test.html?spec=svn14327&r=14327

Deferredキター!いまだにDeferredの概念ワカンネーからあとで調べるとして
今個人的に周りでホットなjsunitって単語出てきた。 
「もっく」とかいうものといい、勉強することいっぱいあります。

2011年11月18日金曜日

HamcrestWebDriverTestCase

HamcrestWebDriverTestCaseとはselenium-webdriverのソースの中に存在するテスト用のクラス。


1.最初から使用できるメソッド名称がWebDriverよりわかりやすくテストケース作成に向いている。
2.表示値確認のassert系のメソッドやクリック用のメソッドを最初から実装している

ことから「このクラス自体を使用すれば簡単にテストを実行できる! 」と公式wiki(http://code.google.com/p/selenium/wiki/LiftStyleApi)には書いてあった。

が独自に調べたところ、実際は器用貧乏になった感があり、なんともいえないクラス。

具体的にいうと、テストの実行が終わったときに強制的にブラウザが閉じられるため、多くのテストを連続して実行するには向いていない上にクリック処理はFireFoxでは動作するがIEでは動作しない。
(WebElementのclickメソッドは役にたたないお)

残念。
あと俺の日本語も残念

2011年11月15日火曜日

ScriptCover

javascriptのカバレッジを調べるためのツール。
今のところchrome専用。

インストールは簡単でchromeから
http://code.google.com/p/script-cover/
にアクセスしてdownloadからcrxをダウンロードするだけ。
成功すれば右上に【JS】のマークが現れ、現在表示しているページのjavascriptのカバレッジ率、および実際に通ったコード通っていないコードを表示してくれる。

想像できる運用としてはselenium-webdriverでテストを実行した後scriptcoverでカバレッジを確認するといったところか。selenium-webdriverで立ち上がったwebdriverで制御されたchromeからscriptcoverが実行できるかは不明。
firefoxならアドオンをwebdriverから実行できるんだけど。。。
また検証したら結果共有します。。。

<追記>
selenium-webdriverで実行されたchromeにscriptcoverをインストールしたところ、フリーズすました。
びっくり。

2011年11月11日金曜日

Selenium 2.12

2.9から2.11まで一気に出たあと、しばらく何もなかったのだが、昨日2.12が発表された。

変更点、特にwebdriverとしては
1.FireFox8がサポート可能に
2.window操作系メソッドの削除予告
3.firefox限定でwindowの位置やサイズが変更可能に
4.FireFox系のメソッドの改名予告
5.ページサイズ自動調整機能
6.リモート接続エラー時のメッセージ増加
7.PageFactory(今開いているページ情報がため込まれている。プーリングのようなもの)のWebElement情報保持(今回限定?)
8.操作無効コンポーネントを操作しようとした時にエラーを吐くように
9.window消失後にハンドルを取得しようとするとエラーを吐くように
10.HtmlUnitのCSS動作の変更

上記のものになる。

今回はたまった不具合を回収する方向ではない模様。

2011年11月9日水曜日

Seleniumクラスの動作検証

以前

Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);

こんな感じでSeleniumクラスを生成すれば全てのSeleniumコマンドを実行出来ると書いたけど、間違いでした。


selenium-webdriver自体のソースの中身を見たところ、実装されているのはこのコマンドのみ(Selenium2.11現在)


addLocationStrategy
addSelection
allowNativeXpath
altKeyDown
altKeyUp
assignId
attachFile
captureScreenshotToString
click
clickAt
check
chooseCancelOnNextConfirmation
chooseOkOnNextConfirmation
close
createCookie
controlKeyDown
controlKeyUp
deleteAllVisibleCookies
deleteCookie
doubleClick
dragdrop
dragAndDrop
fireEvent
focus
getAlert
getAllButtons
getAllFields
getAllLinks
getAllWindowTitles
getAttribute
getAttributeFromAllWindows
getBodyText
getConfirmation
getCookie
getCookieByName
getElementHeight
getElementIndex
getElementPositionLeft
getElementPositionTop
getElementWidth
getEval
getExpression
getHtmlSource
getLocation
getSelectedId
getSelectedIds
getSelectedIndex
getSelectedIndexes
getSelectedLabel
getSelectedLabels
getSelectedValue
getSelectedValues
getSelectOptions
getSpeed
getTable
getText
getTitle
getValue
getXpathCount
goBack
highlight
isAlertPresent
isChecked
isConfirmationPresent
isCookiePresent
isEditable
isElementPresent
isOrdered
isSomethingSelected
isTextPresent
isVisible
keyDown
keyPress
keyUp
metaKeyDown
metaKeyUp
mouseOver
mouseOut
mouseDown
mouseDownAt
mouseMove
mouseMoveAt
mouseUp
mouseUpAt
open
openWindow
refresh
removeAllSelections
removeSelection
runScript
select
selectFrame
selectWindow
setBrowserLogLevel
setContext
setSpeed
setTimeout
shiftKeyDown
shiftKeyUp
submit
type
typeKeys
uncheck
useXpathLibrary
waitForCondition
waitForFrameToLoad
waitForPageToLoad
waitForPopUp
windowFocus
windowMaximize


用はmouseDownRightとかは実装していません。

あんまり使う機会無いと思うから、優先順位低いんだと思われる。

上記に引数を指定してコマンドを実行する。
検証した結果
"hogehoge"や"id=hogehoge"などで大丈夫だった。おそらく"name=hogehoge"とかでも大丈夫。検証してないけど。
多分SeleniumIDEで記録した「値」の部分をそのまま引数で指定してあげればいける。
”value=”や"link="などロケーション種別が存在しないときはidもしくはnameとして認識しているのだと思われる。
そこら辺はリファレンス通りの仕様。

2011/12/22追記
なんと上記コマンドはIE8上では動作しない。
javascriptを実行することによって代替機能を実装するか、webdriverの機能を使って実装しなおす必要がある。

残念すぎる。

2011/12/28追記
実行出来ないのはfucusやmauseOverなど一部のみ。waitForPopup等は実行出来る。よかた。
でも安定しない。結局何もかもwebdriverベースで書いたほうがよさそうだ。

2011年11月5日土曜日

ドラッグアンドドロップ

 Actions builder = new Actions(driver);

 Action dragAndDrop = builder.clickAndHold(someElement)
       .moveToElement(otherElement)
       .release(otherElement)
       .build();

 dragAndDrop.perform();
いろいろ方法はあるものの、とりあえずはこれででできるらしい。 
ちなみにIEはできなくてFireFox限定らしい。
何かにつけてalpha版なんですね。

2011年11月4日金曜日

selenium-webdriverで出来ないこと

どうやらファイルをダウンロードしたりすると表示されるダイアログに関しては操作が出来ない模様。。。
独自実装するしかないのだろうか。。。
alertやconfirmは出来るのにね。

2011年11月2日水曜日

selenium-webdriverのクリック動作

driver.findElement(By.id(id)).click()はchromeだけで動作する
ほかのブラウザでも動作するが、コンポーネントがアクティブになる(?)ぐらいで、クリックイベントまでは実行されない

FireFoxやIEは
ボタンなどの場合:driver.findElement(By.id(id)).sendkey("\n")
チェックボックスなどの場合:driver.findElement(By.id(id)).sendkey(" ")
で解決。
お後がよろしいようで。