<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/unispe/">
    <title>チラシの裏以下の存在</title>
    <link>http://w.atwiki.jp/unispe/</link>
    <atom:link href="https://w.atwiki.jp/unispe/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>チラシの裏以下の存在</description>

    <dc:language>ja</dc:language>
    <dc:date>2014-07-03T18:19:03+09:00</dc:date>
    <utime>1404379143</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/unispe/pages/42.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/unispe/pages/41.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/unispe/pages/40.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/unispe/pages/39.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/unispe/pages/38.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/unispe/pages/37.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/unispe/pages/36.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/unispe/pages/35.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/unispe/pages/34.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/unispe/pages/33.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/unispe/pages/42.html">
    <title>Gradleとは</title>
    <link>https://w.atwiki.jp/unispe/pages/42.html</link>
    <description>
      = [[Gradle]] =
[[BR]]
Gradle(グレイドル)とは、Groovyで作られたビルドシステムです。[[BR]]
設定自身もGroovyで記述する必要がありますが、スクリプト言語をそのまま使用できる為、柔軟性が高く[[BR]]
また、[[Maven]]で行ってくれていた必要ライブラリのダウンロード及び依存関係の整理なども実施してくれます。[[BR]]

== インストール ==

 * ダウンロード先 [[BR]]
 [http://www.gradle.org/ Gradle公式ページ] [[BR]]

公式ページのdownloadsを選択してgradle-1.XX-all.zipを選択する。[[BR]]
ソースとドキュメントが不要だと言う人はgradle-1.XX-bin.zipだけどうぞ[[BR]]

ダウンロードが完了したら解凍し、環境変数「GRADLE_HOME」を設定します。値には解凍したフォルダを設定します。[[BR]]

 * windowsの場合 [[BR]]

コマンドプロンプトを立ち上げて「gradle -version」と入力します。以下の様なGradle情報が出力されればインストールは完了

{{{
#!text
------------------------------------------------------------
Gradle 1.11
------------------------------------------------------------

Build time:   2014-02-11 11:34:39 UTC
Build number: none
Revision:     a831fa866d46cbee94e61a09af15f9dd95987421

Groovy:       1.8.6
Ant:          Apache Ant(TM) version 1.9.2 compiled on July 8 2013
Ivy:          2.2.0
JVM:          1.7.0_45 (Oracle Corporation 24.45-b08)
OS:           [[Wind    </description>
    <dc:date>2014-07-03T18:19:03+09:00</dc:date>
    <utime>1404379143</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/unispe/pages/41.html">
    <title>Gradle</title>
    <link>https://w.atwiki.jp/unispe/pages/41.html</link>
    <description>
      ** - [[Gradleとは]]    </description>
    <dc:date>2014-07-03T17:59:00+09:00</dc:date>
    <utime>1404377940</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/unispe/pages/40.html">
    <title>Maven</title>
    <link>https://w.atwiki.jp/unispe/pages/40.html</link>
    <description>
      Maven とはApache Software Foundationで開発されているソフトウェアプロジェクト管理ツールです。

Maven は Project Object Model (POM) という考え方に基づき、プロジェクトのビルド、テスト、ドキュメンテーション、成果物の配備など、プロジェクトのライフサイクル全体を管理します。プロジェクトのビルドツールである Ant とは異なり、Maven はプロジェクト管理ツールとして、プロジェクトに関する色々な情報を POM に集約し、POM の情報に基づきプロジェクト全体を管理します。

Maven の機能をいくつか挙げると：

- プロジェクトの依存するライブラリの管理。
- プロジェクト情報の配信。(サイトの作成、配備やユニットテストのレポートなど)
- プロジェクトの作成からコンパイル、テスト、パッケージング、配備などのプロジェクトのライフサイクルに含まれる各タスクの支援。

などがあります。

また、Maven はソフトウェアプロジェクトの「管理ツール」であると同時に「理解ツール」でもあります。Maven の第一の目標は、開発者が短期間でプロジェクトを理解する助けとなることです。そのために、Maven では：

- ビルドプロセスを簡単にする。
- 統一したビルドシステムを提供する。
- 良質のプロジェクト情報を提供する。
- 開発のベストプラクティスのためのガイドラインを提供する。
- 新機能への透過的な移行を考慮に入れる。

ということが行われています。これらにより、Maven を利用したプロジェクトはどれもビルド方法が同じであったり、ディレクトリ構成がほぼ同じなので全体を把握しやすいなどのメリットが生まれます。

Maven の構成は、小さなコアと大量のプラグインから成っています。そして、プラグインやライブラリは必要に応じて自動的にダウンロードが行われます。この仕組みによって、Maven やプラグインがバージョンアップされたときに、新機能へ透過的に移行することができます。

早い話が実際に開発を行っていると「開発⇒Junit⇒コンパイル及びパッケージング(jar or war)化⇒デプロイ(配備)⇒動作確認」が繰り返し行われることになると思いますが、その辺を    </description>
    <dc:date>2013-10-23T21:58:29+09:00</dc:date>
    <utime>1382533109</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/unispe/pages/39.html">
    <title>HTMLParser</title>
    <link>https://w.atwiki.jp/unispe/pages/39.html</link>
    <description>
      HTMLParseとは、HTMLの文法に従って記述された複雑な構造のテキスト文書を解析し、プログラムで扱えるようなデータ構造の集合体に変換するプログラムのことを指します。

[[Selenium]]では、HTMLのテキストから要素又は属性に付与された値を特定し、操作を行うことで自動化を実現します。

今回の例では、Google Chromeを使用して検証します。
ちなみに接続するサイトはYahoo!にします。

ブラウザが起動されてからの検証を行いますので、ブラウザを起動する方法については、[wiki:[[ブラウザ起動]] こちら]を参照してください。

*** 特定の要素を指定

Yahooトップページにある「input」の要素を持つデータが8つありますので、それを取得してみます。
取得した後にそれぞれの「input」要素が持つname属性の値を出力します。


#highlight(linenumber,java){{
//特定の要素を指定
List&lt;WebElement&gt; webElementTagList = chromeDriver.findElements(By.tagName(&quot;input&quot;));
for ( WebElement element : webElementTagList){
   System.out.println(element.getAttribute(&quot;name&quot;));
} }}}

結果
p

search.x
fr
tid
ei
aq
oq

となります。
2つ目の結果がNullとなっていますが、これは
&lt;input type=&quot;submit&quot; id=&quot;srchbtn&quot; class=&quot;srchbtn&quot; value=&quot;検索&quot;&gt;
となっており、上記の通りname属性が存在しない為Nullという結果になります。


*** 特定の属性を指定 

Yahooトップページにある検索用の入力フォームの要素に含まれる属性にはname=&quot;p&quot;という値があります。
従って、入力フォーム用の情報を取得するには、以下のようなコードになります。

#highlight(linenumber,java){{
WebElement webElement = chro    </description>
    <dc:date>2013-10-24T20:33:46+09:00</dc:date>
    <utime>1382614426</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/unispe/pages/38.html">
    <title>Proxy設定</title>
    <link>https://w.atwiki.jp/unispe/pages/38.html</link>
    <description>
      Proxyが必要になる場合は、[[ブラウザ起動]]時に認証ダイアログが表示されます。
するとProxy用アカウントを人の手で入力することが必要となり自動化にすることが出来ない為、予めProxyの設定を行っておく必要があります。
各ブラウザの設定方法を以下に記載します。

2013/10/23
どうしてもProxyのアカウント認証ダイアログが出力されてしまう。
どうにかして出さずに自動で認証する方法を検討する必要があるが時間がかかりそうなので、そのうち対応すること

2013/10/28
対応方法判明したので、記載します。
前提として、以下のライブラリをビルドパスに追加すること。

- selenium-server-standalone-2.37.0.jar

=== Internet Explorer ===

#highlight(linenumber,java){{
System.setProperty(&quot;webdriver.ie.driver&quot;, &quot;conf/selenium/IEDriverServer.exe&quot;);

Proxy proxy = new Proxy();
proxy.setSocksProxy(&quot;hostname:port&quot;);
proxy.setSocksUsername(&quot;username&quot;);
proxy.setSocksPassword(&quot;password&quot;);

DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
WebDriver ieDriver = new InternetExplorerDriver(ieCapabilities);
ieCapabilities.setCapability(CapabilityType.PROXY, proxy);
ieDriver.get(&quot;http://yahoo.co.jp&quot;);}}

2013/10/28    </description>
    <dc:date>2013-10-28T21:55:10+09:00</dc:date>
    <utime>1382964910</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/unispe/pages/37.html">
    <title>ブラウザ起動</title>
    <link>https://w.atwiki.jp/unispe/pages/37.html</link>
    <description>
      ブラウザを起動するのに最低限のコード
下記を見て分かるとおりInternet ExplorerとGoogle ChromeにはDriverServerというツールを経由して実行しないと例外が発生する。
さらにIEだけは現在PC上で使用しているIEのセキュリティ設定と同一にしないとこれまた例外が発生するので必要となる。(2～3行目)


**** Internet Explorer

#highlight(linenumber,java){{
System.setProperty(&quot;webdriver.ie.driver&quot;, &quot;conf/selenium/IEDriverServer.exe&quot;);
DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
WebDriver ieDriver = new InternetExplorerDriver(ieCapabilities);
ieDriver.get(&quot;http://yahoo.co.jp&quot;);}}


**** Firefox 

#highlight(linenumber,java){{
WebDriver ffDriver = new FirefoxDriver();
ffDriver.get(&quot;http://yahoo.co.jp/&quot;);}}

**** Google Chrome 

#highlight(linenumber,java){{
System.setProperty(&quot;webdriver.chrome.driver&quot;, &quot;conf/selenium/chromedriver.exe&quot;);
WebDriver chromeDriver = new ChromeDriver();
ChromeDriver.get(&quot;http://yahoo.co.jp/&quot;);}}    </description>
    <dc:date>2013-10-24T13:58:40+09:00</dc:date>
    <utime>1382590720</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/unispe/pages/36.html">
    <title>Selenium</title>
    <link>https://w.atwiki.jp/unispe/pages/36.html</link>
    <description>
      オープンソースのテストツール。人力での動作確認では手間も時間も非常にかかるところを、Seleniumが人間に代わって「早く、正確に、同じ手順で」テストを実行してくれます。

※「Selenium」という単語自体は、自動テストツールのプロジェクトの名前です。 Seleniumプロジェクトで開発されているテストツールには、いくつかの種類があります。

-Selenium-IDE Firefox のアドオンとして、配布されています。Web アプリケーションに対するユーザ操作を記録し、Selenium テストとして保存・再生します。FireFox上の操作を録画し、テストケースとして保存する機能があります。執筆当時の最新バージョンは1.10.0です。適宜最新のアドオンをダウンロードし、そのままFireFoxへインストールしてください。
-Selenium-RC サーバ・クライアント型のテスト実行ツール。複数のブラウザと複数のプログラミング言語に対応し、ページに JavaScript を埋め込むことで動作します。
-Selenium-Grid 複数の環境で同時にテストを実行できるツール。テストは Selenium-RC にリダイレクトされて実行されます。
-Selenium WebDriver サーバ・クライアント型のテスト実行ツール。複数のブラウザと複数のプログラミング言語に対応し、各ブラウザの提供する機能を呼び出して自動操作を実現します。
Seleniumには大きく分けて2種類の実施方法があります。

①．ブラウザのプラグインとしてブラウザを操作する方法

②．プログラムにSeleniumのライブラリを取り込んでプログラムからSeleniumを操作する方法

①の難易度については難しくはないですが、自動操作の限界はブラウザの仕様に依存する為、拡張性はほぼ無しです。

②の難易度については難しく、プログラミング知識(対応言語：Java、C#、Ruby、Python、JavaScript(node))及びSeleniumAPIの知識が必要になりますが、使いこなすことが出来ればブラウザの仕様を自分で定義することが出来る為、拡張性は高いです。

※公式ページ(​http://www.seleniumhq.org/)


***サンプル集
    </description>
    <dc:date>2013-10-28T21:55:54+09:00</dc:date>
    <utime>1382964954</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/unispe/pages/35.html">
    <title>Trigger</title>
    <link>https://w.atwiki.jp/unispe/pages/35.html</link>
    <description>
      Triggerとはデータベース管理システム(DBMS)の機能の一つで、テーブルに何らかの操作が加えられた時にあらかじめ指定した処理を自動的に起動する機能。
Triggerは特殊なストアドプロシージャの一種で、処理の内容と、起動する条件、実行するタイミングなどを指定して設定する。指定した条件に合致する変更が行われると自動的に起動され、指定された処理を行う。いくつかのデータベースやテーブルの内容が連動しており、一ヶ所に行われた変更を他に反映するといった処理のために利用される。

便利とは言えば便利だけど、多用しすぎるとパフォーマンスの低下もするしデータの整合性が取れなくなる恐れがあるので使用上の注意をよく読み用法、用量を守り正しくお使い下さい

* 構文(公式より)

 CREATE [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }
     ON table
     [ FROM referenced_table_name ]
     { NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } }
     [ FOR [ EACH ] { ROW | STATEMENT } ]
     [ WHEN ( condition ) ]
     EXECUTE PROCEDURE function_name ( arguments )
 
 ここでeventは以下のいずれかを取ることができます。
     INSERT
     UPDATE [ OF column_name [, ... ] ]
     DELETE
     TRUNCATE

これだけ見ると結構面倒臭いです。
てなわけで、以下にて説明いたします。    </description>
    <dc:date>2013-10-08T18:37:13+09:00</dc:date>
    <utime>1381225033</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/unispe/pages/34.html">
    <title>ユーザテーブルを全削除</title>
    <link>https://w.atwiki.jp/unispe/pages/34.html</link>
    <description>
      SQLだとなんか長くなりそうだし考えるのが面倒なのでファンクションで作成しました。

■Function本文
 CREATE OR REPLACE FUNCTION del_table()
 RETURNS BOOLEAN AS
 $$
  declare
  CUR_RECORD record;
  begin
  FOR CUR_RECORD IN SELECT * FROM PG_STAT_USER_TABLES LOOP
  EXECUTE &#039;TRUNCATE TABLE &#039; || CUR_RECORD.RELNAME;
  END LOOP;
  return 0;
  end;
 $$
 LANGUAGE PLPGSQL;

■使い方
 SELECT del_table();    </description>
    <dc:date>2013-03-20T23:34:46+09:00</dc:date>
    <utime>1363790086</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/unispe/pages/33.html">
    <title>Windows</title>
    <link>https://w.atwiki.jp/unispe/pages/33.html</link>
    <description>
      -[[ODBC]]    </description>
    <dc:date>2013-02-27T23:41:12+09:00</dc:date>
    <utime>1361976072</utime>
  </item>
  </rdf:RDF>
