2013年3月3日日曜日

【JavaFX2】コントローラクラス

コンポーネントのイベントを貼り付けたりコンポーネントにアクセスするために
フィールド変数を保持したり、何かと忙しいコントローラクラス。

それに対する覚書。

 1.コントローラでないとコンポーネントを認識しない
 @FXMLアノテーションをつけることによって、java側から画面のコンポーネントにアクセスするが、
 そもそもこの機能はコントロールクラスでないと動作しないようだ。

 2.フォーム1つにつきコントローラも1つ
  SCENE Buiderを見る限り、どうもそうっぽい。最終的にごちゃごちゃしてくるのではないだろうか。

 3.初期処理はinitializeで
  コンポーネントに対する初期処理は、コントロールクラスにInitializableを実装し、
  initializeメソッドでやるのが流儀のようだ。

 4.コントローラのインスタンス取得方法
  URL file = new File("fxmlファイルパス").toURI().toURL();
  FXMLLoader loder = new FXMLLoader();
   Conroller controller = (Controller) loader.getController()
    こんな感じ。

さくさく十同できますなぁ。
SCENE Buider自体のバグが気になるけど。

2013年2月24日日曜日

JavaFX2での実装所感

たぶん生きてる間はJavaはなくならないと思うんだ、cobol的に。

いまさらながら、JavaFX2に触れてみた。
・NetBeans最新版ダウンロード
・JavaFXSDKダウンロード
・Scene Builderダウンロード
基本これだけで開発環境が構築される。eclipseとはまだまだ親和性が低い模様。

実装方法もVisual StudioやDelphiと同じくコンポーネントをマウスで設定したり
イベントを紐付けて記述したりと、今までのノウハウがそのまま使えていい感じ。

Mavenで開発環境を構築しようとしたら、ソースのコンパイルはうまくいくが、
JavaFX関連のクラスが参照できず、デバッグ実行がうまくいかなかった。

ローカルに配置したJavaFXSDKのパスをMavenのsettingファイルに環境変数として登録し、
参照させる(ネットワーク経由では参照できない)らしく、やってもうまくいかないので、
いったん保留。

標準のメッセージボックスが存在しないという点が今のところ驚いた点になる。
フリーのライブラリを使用するか、出なければ独自にwindowをモーダル生成し、実装するしかない。

とはいえ、画面をソースで直接記述するSwingよりはかなりいい。関連書籍が少ないのが気になるが。
画面ファイル(fxmlファイル)で他の画面ファイルを継承したり出来るのだろうか。

数年後に消えませんように。

2013年2月20日水曜日

v2.30の追加機能

いろいろな不具合を直しつつ、新機能としては

1. Chromeの動作ログが出力されるようになった。

System.setProperty(ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY,"C:\\abc.log");
WebDriver chrome = new ChromeDriver();

こんな感じ

2.IEの起動オプションが追加
DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability(InternetExplorerDriver.ENABLE_PERSISTENT_HOVERING, true);
caps.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, true);
WebDriver ie = new InternetExplorerDriver(caps);

こんな感じ


正直秋田。
違う方向性を探らなければ。

今のところ、一番興味があるのはJavaFX2。
適当にもの作って、再配布しても著作権的に問題にならないかが気になるところ。

2013年1月5日土曜日

WebDriverでjs単体テスト

最近Seleniumとphantomjsが怪しい。
2.27からごちょごちょやっていて、2.28になって、こんなことを言い出した。

「Added the PhantomJS bindings to the release」

  DesiredCapabilities caps = new DesiredCapabilities();
  caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "/usr/local/bin/phantomjs");
  WebDriver driver = new PhantomJSDriver(caps);
  driver.get("http://gugurekasu.blogspot.jp/");
  System.out.println("TITLE : " + driver.getTitle());
  System.out.println("URL : " + driver.getCurrentUrl());

こんな感じで使える。

http://cdn.ivandemarino.me/slides/speed_up_selenium_with_phantomjs/index.html#title
上記に書いているが、画面を表示しない分、速度が速くなる。
ただしjsのエンジンがwebkit固定なので、WindowsFireFoxなどとはお庭が違う。
そういう意味では、JsTestDriverのほうが起動ブラウザを選択できる分優秀。

残念。

2012年11月24日土曜日

seleniumの2.26になってかわったこと その2



事前に検証することは大事である。ちゃんとやっておけば
「ワンセグ見れる5万のタブレットを買ったものの、
 お風呂までワンセグの電波が届かない。
こんなことならNEXUS買っときゃよかった」
なんてことにはならない。


2.26で出来るようになったことの続き

1.Platformクラスのwindows8対応
 OSの情報を取得できるPlatformクラスがWindows8に対応した。
 [使い方]
        for(String inf:Platform.getCurrent().getPartOfOsName()){
            System.out.println(inf);
        }
        Windows8環境上記メソッドを実行すると
     
      Windows Server 2012
      windows 8
      win8
   
    って出力される

2.プロキシ自動設定、https、socksプロキシに対応
 
 [使い方]
        Proxy proxy = new Proxy();
        FirefoxProfile profile = new FirefoxProfile();

    //自動設定の場合
        proxy.setProxyAutoconfigUrl("http://192.168.0.10/proxy.pac");

   //socksの場合
        proxy.setSocksProxy("hostname.com:1234")
             .setSocksUsername("user")
             .setSocksPassword("pass");

    //httpsの場合
        proxy.setHttpsProxy("hostname:1234");

        profile.setProxyPreferences(proxy);
        WebDriver driver = new FirefoxDriver(profile);

3.Colorクラスでカラーを文字で指定可能に
 [使い方]
        Color clr = Color.fromString("SILVER");
        System.out.println(clr.asRgb());
    指定できる文字はColorsクラスが保持している

その他
・driverのCapabilitiesを使用するコンストラクタのDeprecatedが消えた、なぜに

seleniumの2.26になってかわったこと その1

 
3DSドラゴンクエスト7に求めること
・職業レベルがMAXになって、早く転職したいのに、急に世界から隔離されて、
 ダーマ神殿に行けなくなるタイミングがある。
・マリベルがいい感じに賢者に転職できた頃に強制離脱するシナオリオ
・操作キャラクターが5人いるのに、つれて歩けるのが4人まで。
 中途半端なので一人減らすか、馬車などの一緒に連れていく方法を増やしてほしい。
・特技『怒涛の羊』の威力はそのままで。

それはさておき、去年まで2回/月だったseleniumのバージョンアップが
2、3ヶ月に1回になった。
ただし、いまだにIE対応は躓くところが多いのか、IEDriverのみ
バージョンアップを繰り返すことがおおい。
コツとしては、新バージョンのselenium動作検証あと、1、2週間まって、
IEDriverの世間での安定性を確認すればいいかなと。

2.26で出来るようになったことを一通り。

1.Architectureクラス
 新規追加クラス。クライアントのCPU情報などを取得してくれる。
 [使い方]
  String myArch = Architecture.getCurrent().toString();
    System.out.println(myArch);//x86って出力される。

2.kyesクラスがunicodeに対応した
   unicodeを指定して、キーオブジェクトを取得することが出来るようになった。
 [使い方]
  ①Keys.getKeyFromUnicode('\uE008');  
  ②Keys.getKeyFromUnicode(Keys.SHIFT.charAt(0));
  ①と②は同じキーオブジェクトを返却する。

3.ActionsクラスcontextClickメソッド(引数無しバージョン)追加
  Actions.contextClick()で、その場で右クリックしてくれるようになった。
  以前からも Actions.contextClick(null)で同じことは出来たけれども


その他
・DatabaseStorageクラスがDeprecatedアノテーションくらった
  (使ってる人、少ないと思うけど、、)
・IEから useLegacyServerオプションが完全に撤去された。
  これからはIEDriverを使いましょう
・毎度のログ周りの大きな変更
・毎度のsafari周りの大きな変更


続きはまた今度。
  


2012年11月4日日曜日

待ったことをアピールしてみる

フランスっていいよね。

3ヶ月ぶりにseleniumがVerUpしたので、久々に燃料投下。

ざっと見た感じ2.25から2.26への主な変更点は
1.共通ライブラリが一気に更新(operadriverとか)
2.IE、FireFoxでの安定化(FireFox15、16のnativeイベント対応)
3.プロキシurl自動設定、https、socksプロキシに対応
4.ログまわりの大きな変更
5.kyesクラスのunicode対応
6.名前からcolorクラスを生成可能に
7.safari操作系統がっつり変更


という感じ。
結論から言えば、あげるといいと思うよというところ。
IEでのhover不具合なども直っており、1と2だけでも結構なお得だとおもったり。

詳細な実装方法とかはまた今度。