「第６回Selenium談話会 in Slack」～Selenium デザインパターン&ベストプラクティスの読書会 Part１～ のまとめ

# Selenium談話会 in Slackとは
* 私、@oh_rusty_nail が主催しているSlackを使ったオンライン勉強会です
 * https://seleniumjp.slack.com
 * 地方に住んでいて勉強会に行くのも遠征しないときびしい！といった方には特におすすめです
* 月１回程度の頻度で企画しています
* [日本Seleniumユーザーコミュニティ](https://groups.google.com/forum/#!forum/seleniumjp)で開催の案内を出しています
* ラフな感じでやってますのでお気軽にご参加ください！
 * ![チャットの様子](https://08275154297963728543.googlegroups.com/attach/4236d4fdf8cf405b/slack.png?part=0.1&view=1&vt=ANaJVrFYAk2sse1_p9dtcEakDE4AiQVeKYJHN0S6NzBO4jleAUmzhx1DafHjNU9fGtgGP2wt7F9M_mN73a0ekmpwLYwZNI332m1wJVcNyHWkr56kXGIjnaA)
* 情報を共有し合ったり、流行のツールについてしゃべったり、困りごとや相談をしたり...etc
* 2015/10/16現在の総登録ユーザ数：86名

# 参加方法
* https://seleniumjp.herokuapp.com から登録してください

# 過去に開催した談話会のまとめ
* [「第１回Selenium談話会 in Slack」 のまとめ](http://qiita.com/oh_rusty_nail/items/21e0014c40853571c87b) 【2015/04/22(Wed) 21:00～】
* [「第２回Selenium談話会 in Slack」 のまとめ](http://qiita.com/oh_rusty_nail/items/ccf40fe2d3381ad0ce4f) 【2015/05/13(Wed) 21:00～】
* [「第３回Selenium談話会 in Slack」 のまとめ](http://qiita.com/oh_rusty_nail/items/6efffcb71818914f776e) 【2015/06/16(Tue) 21:00～】
* [「第４回Selenium談話会 in Slack」 のまとめ](http://qiita.com/oh_rusty_nail/items/444e872c731e700ea0dc) 【2015/07/29(Wed) 21:00～】
* [「第５回Selenium談話会 in Slack」 のまとめ](http://qiita.com/oh_rusty_nail/items/e89ada62b31f2ef60462) 【2015/09/02(Wed) 21:00～】

# 「第６回Selenium談話会 in Slack」の議事録
* 日時
 * 2015/10/14(Wed) 21:00～
* 開催案内
 * connpass： http://selenium-danwakai.connpass.com/event/20815/
 * 日本Seleniumユーザーコミュニティ： https://groups.google.com/forum/#!topic/seleniumjp/3e6TmjTSdg
* 今回から半年を目途に2015年9月中旬に発売された[Seleniumデザインパターン & ベストプラクティス](http://www.oreilly.co.jp/books/9784873117423/)の読書会をすろことにしました
* 本の内容についてワイワイしたのですが、ここにそのまま写すことはできないため要点だけ書いていきます

## ＜第１章　最初のテストを書く＞
### SeleniumIDE
* この本で紹介されているのはSeleniumIDEやWebdriverだがSeleniumBuilder愛用者は取り扱われていなくて残念
 * ⇒ 確かにこの本ではBuilderの紹介はされていない
* そして度々のFirefoxやSelenium自体のバージョンアップによって動かなかったりBuilderが起動しなかったりすることがある
* Builderとは？
 * ⇒ 第2回のときにも話に上がった。 [SeleniumBuilderとSeleniumIDE](http://qiita.com/oh_rusty_nail/items/ccf40fe2d3381ad0ce4f#seleniumide%E3%83%8D%E3%82%BF) 参照
* form操作をサクッと書きたいときにSeleniumIDEを使うようにしている。name属性なら確実に使えるので。。。 
* [SelBlocks (for Selenium IDE)](https://addons.mozilla.org/ja/firefox/addon/selenium-ide-sel-blocks/)　を使って分岐ループでゴリゴリまでするとWebDriverの方がもはや楽っていうのある
 * この本にもありましたが比べてみるとWebdriverもそんなに壁もなく使い始められる
 * さすがにSelenium IDEと同じスピードでとは行きませんが、いざとなれば好きな言語で色々できるのはうれしい

### 出来の悪いロケーターと柔軟性のないテスト
* Selenium IDEでも記録モードで取得するものにCSS,xpathを優先にすることが可能だが、実際にそのまま使えるケースのほうが少ないような気がする
 * ⇒ ロケーターはテーブルのような相対で取りたいときには、そのままのキャプチャされたロケーターだと厳しい
* 例に挙げてあるアカウント登録をするケースなどはWebdriverが向いているのかなと思った
 * ⇒ WebDriverでプログラム的に書く方が柔軟かと思う
* この2点が原因で、SeleniumIDEのシェアも落ちているらしい
 * ⇒ 簡単に導入できるが、慣れてくると複雑なこともしたくなるため、Webdriverへ移行したくなるのも不思議ではない

### クロスドメインポリシーの制限
* "Selenium IDE と Seleniuim RCは1回のテスト実行で複数のウェブサイトをテストすることができません" とは？
 * ⇒  www.google.com www.yahoo.com のようなテストがクロスドメインポリシーの制限でできない

### Seleniumが判断するページが開けたとは？
* Seleniumが判断する"ページが開けた"は何をもってそういっているのか？
 * ⇒ [Selenium - IEで自動テストを動かすときにハマったあれこれ - Qiita](http://qiita.com/nkns165/items/53d1afc17023d9ae3ebd#%E7%94%BB%E9%9D%A2%E9%81%B7%E7%A7%BB%E3%81%8C%E7%B5%82%E3%82%8F%E3%82%89%E3%81%AA%E3%81%84)を参照
 * ⇒ 基本的には、JavascriptのonLoadが呼ばれるのと同じだと思うが、ロードが終了、つまり(Ajax通信とかはまだ動いていることもありますが)ベースのHTMLが取得できたときでも、画面遷移の仕組みによってはそこまで待たないこともある。というちょっとモヤッとした定義のようだ
 * ⇒ 経験上だと、IEの場合はちゃんと次画面の要素を指定して待たないと失敗することがある
 * ⇒ [SeleniumHQ/selenium](https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/remote/RemoteWebDriver.java)を見るとHTMLファイル自体がhttp get 他で取得されたタイミングっぽいので、
上で挙げたような問題がある 

### send_keysコマンドの前にはclearコマンドをはさむと良い
* テキスト入力する前にテキストのクリアをしておく
 * ⇒ 確かにこれやっておけば、もし前になんかゴミがはいっていたんじゃない？とかいう疑いも持たなくてよいですし 

```:ruby
element.clear
element.send_keys("hogehoge")
```

* Selenium RCのtype（指定した値で上書きする）とWebDriverのsendKeys（指定した値を既存の値に追加する）の動きの違いのせいで「あれ？」となる方が多い
* 初期値を気にしないようにするため「常にclear()とsendKeys()をセットで呼ぶ」という使い方をよくする

### なぜこの本で扱われている言語はRubyなんだろう、Javaではなく
* この本を読んでいるとRubyの書籍を読んでいる気持ちになる
 * ⇒ この本がRubyなのは恐らく作者さんが最も得意な言語というのと、CucumberのようなBDDフレームワークと相性が良いからかと
 * ⇒ http://www.slideshare.net/NozomiIto/1selenium この資料の11ページのSelenium勉強会参加者アンケートの結果によるとJavaが最も多く、ついでRuby

### 使用する言語
* 現場で自動化に取り組むときは、最も経験者が多い言語を採用するやども検討する必要があると感じた
 * ⇒ そうでないと書くのもしんどいしレビューもしんどいしと　いいことなし

## 本の作成に関してこぼれ話
* (シークレットだろうと思われるのでここには書きません^^)
* これ実際に関わられた方に聞けるなんてこんな面白いことないだろ案件でしたが、本日一番貴重な体験談をお聞きしました 

## ＜第２章　Spaghettiパターン＞
### これはスパゲティ？
* 登録機能で登録したデータを、照会機能で照会するような結合テストは、スパゲッティに該当するのか
 * ⇒ 「テストケースの意図」が「登録して検索する」というものならOK
 * ⇒ 検索のバリエーションテストをするような場合、Fixtureで事前投入しての方がテストケースの意図として自然
 * ⇒ 検索の部分が主体のテストなのにそこのデータ準備もSeleniumでやると時間もかかるし、意図と関係ないところでコケるとわけわからなくなる

### xUnit Test Patterns
*  http://xunitpatterns.com/ 粒度は異なることが多いが、テストケースやスィートとしてまとめる基準としてはxUnit Test Patternsでかなり検討されているので、Seleniumの機能テストやシステムテストでも考え方は応用できる

### ロケータはどのように使っているのか？
* CSSやxpath,リンクテキストなど様々なロケータで要素が指定してあるものを見たことがあり、気持ち悪かったので全部CSSに変えたことがあった
* でも、チームでルールきめたりするのがよいなと後で思った。例えば、リンクはリンクテキストで指定しよう　xpath/cssで書くならばcss使おうよ！ など
 * ⇒ [Selenium の locator とうまくつきあうための話 - Qiita](http://qiita.com/okitan/items/cdf8809405821e057609) このokitanさんの資料がシンプルにまとまっていてすばらしいと思う
        * Qiita記事のlink textが最下位なのはなんでだろうと思ったが、多言語の問題のためだった(納得)
 * ⇒ idは使えるようでランダムにふる酷いシステムもある
        * 数字とか入ってるやつはidとはいえもう使えないも同然
 * ⇒ 全部CSSまたはxpath指定でやっていますという方もちらほら
        * xpathが一番表現力あるので、統一するならxpath。しかし、CSSの圧倒的な見やすさも魅力がある
        * 規則性があるものはxpathだと思うが、基本CSSが一番よい。パフォーマンス的にはxpathの方がよくない


### ミクロネシアミツスイってご存知です？
* この本のカバーの鳥
 * ⇒ これを聞いて答えられるのは本を読了している証拠と 

# 次回開催日時
* 読書会第1回が好評だったため、予定通り読書会を継続します
* 2015/11/25(Wed) 21:00～
 * 次回も監訳者の太田健一郎さんに参加していただける予定です(ありがとうございます！)
* 開催案内
 * http://selenium-danwakai.connpass.com/event/21531/
 * https://groups.google.com/forum/#!topic/seleniumjp/r9pQeGxjtig
* テーマは[Seleniumデザインパターン & ベストプラクティス](http://www.oreilly.co.jp/books/9784873117423/)の読書会
 * 範囲は第３章～第４章くらいを目途に考えています



----

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, Appium, SauceLabs, TravisCI, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください