Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
私がSeleniumを使って
スクリーンショット
を撮るまでに出会っ
た闇の全て 新日鉄住金ソリューションズ
石川 真也
(Selenium歴11ヶ月)
Copyright © 2015 NS Solutions Corporation, Al...
End to End(E2E)テスト
Copyright © 2015 NS Solutions Corporation, All rights reserved. 2
E2Eテスト
• アプリケーションの
「最初から最後まで」の動作を
たしかめるテスト
• ブラウザなどを使う
Copyright © 2015 NS Solutions Corporation, All rights reserved. 3
Copyright © 2015 NS Solutions Corporation, All rights reserved. 4
Internet Explorer 7
Internet Explorer 8
Internet Explore...
そこで
Copyright © 2015 NS Solutions Corporation, All rights reserved. 5
テスト自動化
Copyright © 2015 NS Solutions Corporation, All rights reserved. 6
Copyright © 2015 NS Solutions Corporation, All rights reserved. 7
ブラウザ操作自動化ツール
Selenium
Selenium-特徴
 OSS(Apache2.0)
 様々なブラウザに対応
 豊富な言語バインディング
 Java, C#, Python, Ruby, JavaScript etc.
 豊富な支援ツール
 Selenium g...
Selenium-コード例
public class Example {
public static void main(String[] args) {
WebDriver driver = new HtmlUnitDriver();
dri...
Selenium-こんなこともできる
Copyright © 2015 NS Solutions Corporation, All rights reserved. 10
• 任意のJavaScriptコードを実行できる
• 表示中のページのス...
スクリーンショット取得機能
• レイアウト確認
• エビデンス取得
• 差分検知
• for リグレッションテスト
Copyright © 2015 NS Solutions Corporation, All rights reserved. ...
目標
Seleniumを使って
スクリーンショットを撮ろう!
Copyright © 2015 NS Solutions Corporation, All rights reserved. 12
目標
Seleniumを使って
スクリーンショットを撮ろう!
Copyright © 2015 NS Solutions Corporation, All rights reserved. 13
以下、
Copyright © 2015 NS Solutions Corporation, All rights reserved. 14
Seleniumでスクリーンショットを
撮ろうとした時の
闇(はまりどころ)を紹介
Copyright © 2015 NS Solutions Corporation, All rights reserved. 15
の闇ブラウザ依存
Copyright © 2015 NS Solutions Corporation, All rights reserved. 16
File screenshotFile = ((Screenshot)driver).getScreenshotAs(file);
Copyright © 2015 NS Solutions Corporation, All rights re...
可視範囲のみ
いろんなバー映り込む
Copyright © 2015 NS Solutions Corporation, All rights reserved. 18
Internet Explorer Google Chrome Safar...
TakesScreenshot interface
For WebDriver extending TakesScreenshot, this makes a best effort
depending on the browser to re...
TakesScreenshot interface(意訳)
実装するときは下記の順でどれか返してくれればいいよ。
ブラウザによってベストエフォートで実装してね。
• ページ全体
• 現在のウインドウ
• 現在のフレームの可視範囲
• ブラウザも...
闇が深い
Copyright © 2015 NS Solutions Corporation, All rights reserved. 21
対策
地道にブラウザ依存の処理を
吸収する
Copyright © 2015 NS Solutions Corporation, All rights reserved. 22
対策
Copyright © 2015 NS Solutions Corporation, All rights reserved. 23
スクロールしながら撮る
撮った画像を繋ぐ
対策
Copyright © 2015 NS Solutions Corporation, All rights reserved. 24
アクセスするたびに内容が変わる
ウィジェット
→スクリーンショットは撮るが
差分検知のときは無視する
ス...
サブピクセルの闇
Copyright © 2015 NS Solutions Corporation, All rights reserved. 25
部分スクリーンショット取得時
身に覚えのないdiff
Copyright © 2015 NS Solutions Corporation, All rights reserved. 26
よく調べると
Copyright © 2015 NS Solutions Corporation, All rights reserved. 27
要素A
要素A
top: 200px
left: 100px
top: 300.5px
left...
原因→サブピクセルレンダリング
• ブラウザ上の要素の座標は実数
• 小数点以下の値を正確に扱おう
と試みた結果、微妙な差が出る
Copyright © 2015 NS Solutions Corporation, All rights res...
ブラウザ毎の座標の扱いと
レンダリング
ブラウザ名 状態
Internet Explorer 7 小数点以下の座標を持たない
Internet Explorer 8
内部的に小数点以下の座標を持つが取得できる値は整数のみ。
横方向はレンダリング...
闇が深い
Copyright © 2015 NS Solutions Corporation, All rights reserved. 30
対策
Copyright © 2015 NS Solutions Corporation, All rights reserved. 31
要素A
要素A
top: 200px
left: 100px
top: 300.5px
left: 10...
対策
Copyright © 2015 NS Solutions Corporation, All rights reserved. 32
要素A 要素A
top: 0px
left: 0px
top: 0px
left: 0px
要素Aのスク...
なぜかブラウザで開いている
画面と取得したスクリーン
ショットが違うの闇
Copyright © 2015 NS Solutions Corporation, All rights reserved. 33
IE8でスクリーンショット取得時
Copyright © 2015 NS Solutions Corporation, All rights reserved. 34
Lorem ipsum dolor sit
amet, consectetu...
ウィンドウサイズを勝手に変えて
いるのは誰?
Copyright © 2015 NS Solutions Corporation, All rights reserved. 35
Selenium
クライアント
ドライバ ブラウザ
スクリーンシ...
対策
Copyright © 2015 NS Solutions Corporation, All rights reserved. 36
Selenium
クライアント
ドライバ ブラウザ
改修(C++)
闇が深い
Copyright © 2015 NS Solutions Corporation, All rights reserved. 37
もうたくさんだ…
Copyright © 2015 NS Solutions Corporation, All rights reserved. 38
私はただ
(きれいな)スクリーンショット
を撮りたいだけなのに!!!!
Copyright © 2015 NS Solutions Corporation, All rights reserved. 39
これからSeleniumを使う人たちに
同じ闇を味わってほしくない
Copyright © 2015 NS Solutions Corporation, All rights reserved. 40
そこで
Copyright © 2015 NS Solutions Corporation, All rights reserved. 41
作りました。
Copyright © 2015 NS Solutions Corporation, All rights reserved. 42
Copyright © 2015 NS Solutions Corporation, All rights reserved. 43
Apache2.0
License
Copyright © 2015 NS Solutions Corporation, All rights reserved. 44
IE
Safari
Chrome
テスト
スクリプト
Pitalium
対象
ブラウザ
・IE
・Chrome...
テスト自動化の闇テスト自動化の闇と向き合う
Copyright © 2015 NS Solutions Corporation, All rights reserved. 45
まとめ
Copyright © 2015 NS Solutions Corporation, All rights reserved. 46
• マルチデバイス対応の闇は深い
• スクリーンショット取得が特に
深い
• そんな闇を祓うツール
P...
続きはWeb(or 展示ブース)で!
https://www.htmlhifive.com/
Copyright © 2015 NS Solutions Corporation, All rights reserved. 47
・ NS Sol...
Upcoming SlideShare
Loading in …5
×

私がSeleniumを使ってスクリーンショットを撮るまでに出会った闇の全て

8,063 views

Published on

OSC東京2015 Fall ライトニングトーク資料

Published in: Technology
  • Be the first to comment

私がSeleniumを使ってスクリーンショットを撮るまでに出会った闇の全て

  1. 1. 私がSeleniumを使って スクリーンショット を撮るまでに出会っ た闇の全て 新日鉄住金ソリューションズ 石川 真也 (Selenium歴11ヶ月) Copyright © 2015 NS Solutions Corporation, All rights reserved. 1
  2. 2. End to End(E2E)テスト Copyright © 2015 NS Solutions Corporation, All rights reserved. 2
  3. 3. E2Eテスト • アプリケーションの 「最初から最後まで」の動作を たしかめるテスト • ブラウザなどを使う Copyright © 2015 NS Solutions Corporation, All rights reserved. 3
  4. 4. Copyright © 2015 NS Solutions Corporation, All rights reserved. 4 Internet Explorer 7 Internet Explorer 8 Internet Explorer 9 Internet Explorer 10 Internet Explorer 11 Microsoft Edge Firefox Google Chrome Safari Safari(iOS) Google Chrome(Android) ・アプリにアクセス ・ログイン ・カートに商品を追加 ・配送先を選択 ・支払い方法を選択 ・注文の確認 ・購入完了 ・アプリにアクセス ・ログイン ・カートに商品を追加 ・配送先を選択 ・支払い方法を選択 ・注文の確認 ・購入完了 ・アプリにアクセス ・ログイン ・カートに商品を追加 ・配送先を選択 ・支払い方法を選択 ・注文の確認 ・購入完了 ・アプリにアクセス ・ログイン ・カートに商品を追加 ・配送先を選択 ・支払い方法を選択 ・注文の確認 ・購入完了 ・アプリにアクセス ・ログイン ・カートに商品を追加 ・配送先を選択 ・支払い方法を選択 ・注文の確認 ・購入完了 ・アプリにアクセス ・ログイン ・カートに商品を追加 ・配送先を選択 ・支払い方法を選択 ・注文の確認 ・購入完了 ・アプリにアクセス ・ログイン ・カートに商品を追加 ・配送先を選択 ・支払い方法を選択 ・注文の確認 ・購入完了 ・アプリにアクセス ・ログイン ・カートに商品を追加 ・配送先を選択 ・支払い方法を選択 ・注文の確認 ・購入完了 ・アプリにアクセス ・ログイン ・カートに商品を追加 ・配送先を選択 ・支払い方法を選択 ・注文の確認 ・購入完了 ・アプリにアクセス ・ログイン ・カートに商品を追加 ・配送先を選択 ・支払い方法を選択 ・注文の確認 ・購入完了 複数の対象ブラウザで 同じテストを実行 (クロスブラウザテスト) →負担大
  5. 5. そこで Copyright © 2015 NS Solutions Corporation, All rights reserved. 5
  6. 6. テスト自動化 Copyright © 2015 NS Solutions Corporation, All rights reserved. 6
  7. 7. Copyright © 2015 NS Solutions Corporation, All rights reserved. 7 ブラウザ操作自動化ツール Selenium
  8. 8. Selenium-特徴  OSS(Apache2.0)  様々なブラウザに対応  豊富な言語バインディング  Java, C#, Python, Ruby, JavaScript etc.  豊富な支援ツール  Selenium grid:テストの分散・並列実行  Selenium IDE:画面操作の記録・再生  Appium:iOS, Androidのテストが可能に Microsoft Edgeにも! Copyright © 2015 NS Solutions Corporation, All rights reserved. 8 →間口の広さ
  9. 9. Selenium-コード例 public class Example { public static void main(String[] args) { WebDriver driver = new HtmlUnitDriver(); driver.get("http://www.google.com"); WebElement element = driver.findElement(By.name("q")); element.sendKeys("Cheese!"); element.submit(); System.out.println("Page title is: " + driver.getTitle()); driver.quit(); } } フォーム操作 ページリクエスト 値の取得 Copyright © 2015 NS Solutions Corporation, All rights reserved. 9
  10. 10. Selenium-こんなこともできる Copyright © 2015 NS Solutions Corporation, All rights reserved. 10 • 任意のJavaScriptコードを実行できる • 表示中のページのスクリーンショットを 取得できる
  11. 11. スクリーンショット取得機能 • レイアウト確認 • エビデンス取得 • 差分検知 • for リグレッションテスト Copyright © 2015 NS Solutions Corporation, All rights reserved. 11 File screenshotFile = ((Screenshot)driver).getScreenshotAs(file);
  12. 12. 目標 Seleniumを使って スクリーンショットを撮ろう! Copyright © 2015 NS Solutions Corporation, All rights reserved. 12
  13. 13. 目標 Seleniumを使って スクリーンショットを撮ろう! Copyright © 2015 NS Solutions Corporation, All rights reserved. 13
  14. 14. 以下、 Copyright © 2015 NS Solutions Corporation, All rights reserved. 14
  15. 15. Seleniumでスクリーンショットを 撮ろうとした時の 闇(はまりどころ)を紹介 Copyright © 2015 NS Solutions Corporation, All rights reserved. 15
  16. 16. の闇ブラウザ依存 Copyright © 2015 NS Solutions Corporation, All rights reserved. 16
  17. 17. File screenshotFile = ((Screenshot)driver).getScreenshotAs(file); Copyright © 2015 NS Solutions Corporation, All rights reserved. 17
  18. 18. 可視範囲のみ いろんなバー映り込む Copyright © 2015 NS Solutions Corporation, All rights reserved. 18 Internet Explorer Google Chrome Safari(iOS)
  19. 19. TakesScreenshot interface For WebDriver extending TakesScreenshot, this makes a best effort depending on the browser to return the following in order of preference: • Entire page • Current window • Visible portion of the current frame • The screenshot of the entire display containing the browser http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/TakesScreenshot.html Copyright © 2015 NS Solutions Corporation, All rights reserved. 19
  20. 20. TakesScreenshot interface(意訳) 実装するときは下記の順でどれか返してくれればいいよ。 ブラウザによってベストエフォートで実装してね。 • ページ全体 • 現在のウインドウ • 現在のフレームの可視範囲 • ブラウザも含むディスプレイ全体 http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/TakesScreenshot.html Copyright © 2015 NS Solutions Corporation, All rights reserved. 20
  21. 21. 闇が深い Copyright © 2015 NS Solutions Corporation, All rights reserved. 21
  22. 22. 対策 地道にブラウザ依存の処理を 吸収する Copyright © 2015 NS Solutions Corporation, All rights reserved. 22
  23. 23. 対策 Copyright © 2015 NS Solutions Corporation, All rights reserved. 23 スクロールしながら撮る 撮った画像を繋ぐ
  24. 24. 対策 Copyright © 2015 NS Solutions Corporation, All rights reserved. 24 アクセスするたびに内容が変わる ウィジェット →スクリーンショットは撮るが 差分検知のときは無視する スクロールに追従する要素 →スクリーンショットを撮るときに 隠す(hidden)
  25. 25. サブピクセルの闇 Copyright © 2015 NS Solutions Corporation, All rights reserved. 25
  26. 26. 部分スクリーンショット取得時 身に覚えのないdiff Copyright © 2015 NS Solutions Corporation, All rights reserved. 26
  27. 27. よく調べると Copyright © 2015 NS Solutions Corporation, All rights reserved. 27 要素A 要素A top: 200px left: 100px top: 300.5px left: 100px 要素Aの位置が変わっただけで 中身が変わるもよう
  28. 28. 原因→サブピクセルレンダリング • ブラウザ上の要素の座標は実数 • 小数点以下の値を正確に扱おう と試みた結果、微妙な差が出る Copyright © 2015 NS Solutions Corporation, All rights reserved. 28
  29. 29. ブラウザ毎の座標の扱いと レンダリング ブラウザ名 状態 Internet Explorer 7 小数点以下の座標を持たない Internet Explorer 8 内部的に小数点以下の座標を持つが取得できる値は整数のみ。 横方向はレンダリングに影響するが縦方向は影響しない。 Internet Explorer 9 内部的に小数点以下の座標を持つが取得できる値は整数のみ。 縦横両方向のレンダリングに影響する。 Internet Explorer 10 , 11 Mozilla Firefox Google Chrome 内部的に小数点以下の座標を持ち、取得される値も小数点を含む。 縦横両方向のレンダリングに影響する。 Copyright © 2015 NS Solutions Corporation, All rights reserved. 29
  30. 30. 闇が深い Copyright © 2015 NS Solutions Corporation, All rights reserved. 30
  31. 31. 対策 Copyright © 2015 NS Solutions Corporation, All rights reserved. 31 要素A 要素A top: 200px left: 100px top: 300.5px left: 100px 要素の座標が同じなら、 描画結果は同じになるはず…
  32. 32. 対策 Copyright © 2015 NS Solutions Corporation, All rights reserved. 32 要素A 要素A top: 0px left: 0px top: 0px left: 0px 要素Aのスクリーンショットを 撮る間だけ、固定座標に移動
  33. 33. なぜかブラウザで開いている 画面と取得したスクリーン ショットが違うの闇 Copyright © 2015 NS Solutions Corporation, All rights reserved. 33
  34. 34. IE8でスクリーンショット取得時 Copyright © 2015 NS Solutions Corporation, All rights reserved. 34 Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ○○のページ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ○○のページ スクリーンショットにすると ほんの少しだけ幅が狭い…??
  35. 35. ウィンドウサイズを勝手に変えて いるのは誰? Copyright © 2015 NS Solutions Corporation, All rights reserved. 35 Selenium クライアント ドライバ ブラウザ スクリーンショット 撮って! どうぞ(画像) Json wire protocol ブラウザ拡張機能 OSのネイティブ機能 ウインドウサイズ 変えます
  36. 36. 対策 Copyright © 2015 NS Solutions Corporation, All rights reserved. 36 Selenium クライアント ドライバ ブラウザ 改修(C++)
  37. 37. 闇が深い Copyright © 2015 NS Solutions Corporation, All rights reserved. 37
  38. 38. もうたくさんだ… Copyright © 2015 NS Solutions Corporation, All rights reserved. 38
  39. 39. 私はただ (きれいな)スクリーンショット を撮りたいだけなのに!!!! Copyright © 2015 NS Solutions Corporation, All rights reserved. 39
  40. 40. これからSeleniumを使う人たちに 同じ闇を味わってほしくない Copyright © 2015 NS Solutions Corporation, All rights reserved. 40
  41. 41. そこで Copyright © 2015 NS Solutions Corporation, All rights reserved. 41
  42. 42. 作りました。 Copyright © 2015 NS Solutions Corporation, All rights reserved. 42
  43. 43. Copyright © 2015 NS Solutions Corporation, All rights reserved. 43 Apache2.0 License
  44. 44. Copyright © 2015 NS Solutions Corporation, All rights reserved. 44 IE Safari Chrome テスト スクリプト Pitalium 対象 ブラウザ ・IE ・Chrome ・Safari
  45. 45. テスト自動化の闇テスト自動化の闇と向き合う Copyright © 2015 NS Solutions Corporation, All rights reserved. 45
  46. 46. まとめ Copyright © 2015 NS Solutions Corporation, All rights reserved. 46 • マルチデバイス対応の闇は深い • スクリーンショット取得が特に 深い • そんな闇を祓うツール Pitaliumをよろしくお願いします
  47. 47. 続きはWeb(or 展示ブース)で! https://www.htmlhifive.com/ Copyright © 2015 NS Solutions Corporation, All rights reserved. 47 ・ NS Solutions、NS(ロゴ)、NSSOLは、新日鉄住金ソリューションズ株式会社の登録商標です。 ・ hifive、hifive(ロゴ)は、新日鉄住金ソリューションズ株式会社の登録商標です。 ・ Pitalium、Pitalium(ロゴ)は、新日鉄住金ソリューションズ株式会社の商標です。 ・ Javaは、米国ORACLE Corp.の登録商標です。 ・ HTML5 Logo by W3C ・ その他本文記載の会社名及び製品名は、それぞれ各社の商標又は登録商標です。 Pitaliumのデモも あるよ!

×