SlideShare a Scribd company logo
SeleniumでWebと戯れよう
みんなのPython勉強会 #27
株式会社SHIFT 玉川紘子
@nkns165
自己紹介
 玉川紘子(@nkns165)
 ソフトウェアテストエンジニア
 主に自動化・CIを担当しています
 コミュニティ活動もしています
テスト自動化研究会
自己紹介
 自動テスト関連の技術書の翻訳お手伝いとかもしています
付録執筆 監訳 付録執筆
Seleniumとは?
 http://www.seleniumhq.org/
 Webブラウザの操作を自動化できるOSS
 対応ブラウザ
 IE, Firefox, Chrome, Safari, Opera, Edge
 利用できるプログラミング言語
 Java, C#, JavaScript, PHP, Python, Rubyなど多数
Seleniumでできること・できないこと
 できること
 URL遷移
 入力操作(テキスト入力、ラジオボタン/チェックボックス/プルダウンの選
択、ボタンのクリック等)
 各種マウス操作 ※やや苦手(不安定になりがち)
 画面の内容確認(タイトル、画面内の文字列、要素の表示/非表示、要素
の活性/非活性、CSSの値)
 JavaScriptの実行
 できないこと
 ブラウザ外の操作(ファイル選択ダイアログの操作等)
 HTMLタグ以外の要素の解析
Seleniumの歴史
 Selenium 1 or Selenium RC(2004〜)
 JavaScriptベースの実装
 クロスブラウザのテストを実際に運用するにはやや厳しい
 Selenium 2 or Selenium WebDriver(2011〜)
 Googleで開発されていたWebDriverと融合し、APIを一新
 各ブラウザ専用のドライバを使い、APIのみ共通化することでクロスブラ
ウザのテストを現実的なものに
 この時点ではSelenium RCのAPIも残存
 Selenium 3(2016〜)
 Selenium RCのAPIを切り捨て、スリム化
 特に大きな機能追加はなし
簡単なSeleniumのコード
# 必要なライブラリのインポート
from selenium import webdriver
from selenium.webdriver.common.keys import
import unittest
# Chromeを起動し、Googleを開く
browser = webdriver.Chrome()
browser.get(‘https://google.co.jp’)
# 検索キーワードを入力
query_input = browser.find_element_by_id(‘lst-ib’)
query_input.send_keys(‘みんなのPython勉強会’)
query_input.send_keys(Keys.ENTER)
# 結果を出力
links = browser.find_elements_by_css_selector(‘div.rc>h3.r>a’)
for link in links:
print(link.text)
print(link.get_attribute('href'))
assert len(links) == 7
8
Seleniumを使ったスクレイピング
 pyqueryやBeautiful Soupを使ったスクレイピングとの違い
 メリット
 実際のユーザ操作と同じように画面を開いて、ログインして、…という処
理ができるので、Cookie等の仕組みを解析しなくても自由に画面遷移が
できる
 Ajax通信で後から表示される要素も取得することができる
 デメリット
 遅い(画面遷移だけでなく、タグの取得自体も遅い)
 静的なページやログイン不要なサイトであれば、通常のHTTPリクエストで
HTMLを取得するタイプのライブラリが圧倒的に有利
 Seleniumと上記のようなライブラリを併用する場合もある(画面を開いてから、
HTMLソースの文字列を取得して解析にかける)
9
Jupyter Notebookを使ってTry & Error
 Jupyter Notebookとは
 Pythonのコードを含んだWebページを生成できる機能
 ドキュメント生成としても優れているが、Webページ上でかんたんにステッ
プ実行ができるので、Try & Errorを繰り返しながらコーディングを進めて
いくのにも最適
 インストールも簡単(下記はMacの場合)
# Jupyter本体のインストール
$ pip install jupyter
# Seleniumと、その中でChromeを使うための設定
$ brew install chromedriver
$ pip install selenium
# 起動
$ jupyter notebook
10
実際に作ってみたNotebook
11
デモ
12
Notebookの内容をバッチ実行してみる
 作成・保存したNotebookはipynb形式で保存される
 runipyコマンドで実行可能
# runipyのインストール
$ pip install runipy
# バッチ実行
$ ruipy start_python.ipynb out.ipynb
# 結果をどこでも見られるようにHTMLに変換
$ jupyter nbconvert out.ipynb --to html
13
Seleniumで自動テスト
 こちらの用途のほうがメジャー(たぶん)
 Selenium自体にはテストの機能はないため、別途テスティング
フレームワークと組み合わせる必要がある
 unittest
 Doctest
 Nose など
 テスティングフレームワークとは
 コードの結果に対してOK/NGの判定、結果の集計、レポーティング等を
行ってくれるフレームワーク。ただブラウザを操作するだけではテストに
ならないので、テスティングフレームワークの利用は必須
# unittestを使う場合
import unittest
…
assert len(links) == 7
14
ふたたびデモ
15
自動テストのメリット
 人では絶対にこなせない量・高頻度のテストを工数をかけずに
実現
 サービスの機能追加に伴い回帰テストを自動化することで、開
発のリードタイムを落とさず品質をキープ
機能数の増加 顧客数の増加
自動化
新規機能
既存機能
テスト
ケース数
開発のイテレーション
ベースとなるパッケージ
顧客A
の設定
顧客B
の設定
顧客C
の設定
…
顧客A用の
改修を実施
顧客A用の
設定をテスト
自動化
新機能
開発
OK OK
16
自動テストをもっと活用するために
 「自動テストを手動で実行する」ほど悲しいことはない
 CI(継続的インテグレーション)環境を作って、自動テストが自
動で回るようにする
 定期的 or コードに変更があるたびにテストを実行
 結果を通知(メール, Slack,…)
 履歴が綺麗に残り、みんなで共有できる
Jenkins Travis CI Circle CI
17
Seleniumで苦労する点
 実行時間が長い
 いくら工数がかからないとは言え、あまりにも長いテストは生産性を下げる
 テストが不安定になる
 特にJavaScriptによる動的なアクションの多い画面では、うまく作らないとタイ
ミング依存のエラーが頻発する
 注意しないとすぐに保守コストが爆発
 UI変更、文言変更で即崩壊するテストは役に立たない
 うまく共通化して保守コストを下げよう
 人によっては、「何でもSeleniumでテストしたい」症候群を発病
 メール受信のテストは普通にメール受信するプログラムを書きましょう…
18
バランスに気をつけることが大事
 理想は「テストのピラミッド」
 最初は逆ピラミッド(アイスクリームコーン)になってしまうことも
ある
 ないよりはマシ。少しずつ形を変えていけばOK
単体テスト・
コンポーネントテスト
受入テスト
(APIレイヤー)
GUIテスト
手動テスト
どうしても欠かせない
重要ケースはEndToEndで。
ただし、不安定なので
数は絞る
高速実行可能・
安定している
単体テストを重視
19
最後に宣伝
 あの「アジャイルサムライ」の著者、Jonathan Rasmussonの自動化
本「The Way of the Web Tester」の日本語訳を担当しました
 9月ごろ発売予定
 「テストのピラミッド」の話もたくさん出てきます
※表紙は全然違う
ものになると思います
20
ご清聴ありがとうございました!

More Related Content

PDF
エンタープライズ開発でのSelenium活用事例
PDF
海外のSeleniumカンファレンスではどんな発表がされているのか2014
PDF
Seleniumをもっと知るための本の話
PDF
去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww
PPTX
Selenium IDE for primer
PPTX
サイボウズLiveの開発を支えるSeleniumテスト
PPTX
Appium を使って iOS / Android の UI テストを共通化
PDF
20141018 selenium appium_cookpad
エンタープライズ開発でのSelenium活用事例
海外のSeleniumカンファレンスではどんな発表がされているのか2014
Seleniumをもっと知るための本の話
去年のデブサミの「日本Seleniumユーザーコミュニティ」のLTが真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった結果ww
Selenium IDE for primer
サイボウズLiveの開発を支えるSeleniumテスト
Appium を使って iOS / Android の UI テストを共通化
20141018 selenium appium_cookpad

What's hot (20)

PDF
Appiumのテスト結果レポートをsahaginで作ってみる
PDF
Selenium入門
PDF
Selenium boot campの紹介
PDF
Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会
PDF
テストの自動化を考える前に
PDF
テスト自動化の様々な道具を使ってみた四方山話
PPTX
STFとAppiumをもちいたAndroidアプリの自動テスト
PDF
20161212 selenium adventcalender
PDF
サイボウズがWebアプリ自動テスト に活用しているossツールの紹介
PDF
JenkinsとSeleniumの活用事例
PPTX
価値あるシステムテスト自動化の実現By friendly
PDF
はじめてのTypescript
PPTX
Win7 * appium * androidで実機自動テストやってみた。
PPTX
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
PDF
チャットツールをSlackだけにしたい話ver1 00
PDF
Ruby on vim yokohama.vim発表資料
PPTX
Selenium2(web driver) ide編
PDF
XP祭り2013-LT-Codeer
PPTX
Robotium を使った UI テストとレイアウト確認の効率化
PDF
わかると楽しいInfrastructure as code
Appiumのテスト結果レポートをsahaginで作ってみる
Selenium入門
Selenium boot campの紹介
Seleniumの薄っすい話 百八式 @ 第3回 日本Seleniumユーザーコミュニティ勉強会
テストの自動化を考える前に
テスト自動化の様々な道具を使ってみた四方山話
STFとAppiumをもちいたAndroidアプリの自動テスト
20161212 selenium adventcalender
サイボウズがWebアプリ自動テスト に活用しているossツールの紹介
JenkinsとSeleniumの活用事例
価値あるシステムテスト自動化の実現By friendly
はじめてのTypescript
Win7 * appium * androidで実機自動テストやってみた。
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
チャットツールをSlackだけにしたい話ver1 00
Ruby on vim yokohama.vim発表資料
Selenium2(web driver) ide編
XP祭り2013-LT-Codeer
Robotium を使った UI テストとレイアウト確認の効率化
わかると楽しいInfrastructure as code
Ad

Viewers also liked (20)

PDF
Jenkinsfileのlintで救える命がある
PDF
Travis, Circle そして Jenkins 2.0
PPTX
Jenkins と groovy
PDF
自動化パタンランゲージ
PDF
「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansai
PDF
スクラムにおける事前期待のマネジメント - Customer Expectations Management of Scrum #sgt2016
PDF
モックアップ共有のススメ
PDF
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
PDF
Shibuyatrac#13 scurmでやってみた
PDF
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~
PDF
「実録!となりのJenkins2.0」 - 第7回大阪 / 第9回(東京)Jenkins勉強会 #jenkinsstudy
PDF
Startup jenkins!
PDF
Jenkins User Conference 2012 Tokyo 「SIerのJenkins事情」
PDF
書類作成環境のあるべき論とは
PDF
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
PDF
第4回品川Redmine勉強会資料「チケット駆動開発のフレームワーク~現場の経験知からパターン言語へ(ベータ版)」
PDF
サラリーマンでギョーミーなプログラマ(つまりオレ)でも片手間で作れるXFD
PDF
邪道Jenkins
PDF
Jenkinsではじめる継続的インテグレーション
PDF
Jenkinsを導入する本当の理由を考えてみた
Jenkinsfileのlintで救える命がある
Travis, Circle そして Jenkins 2.0
Jenkins と groovy
自動化パタンランゲージ
「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansai
スクラムにおける事前期待のマネジメント - Customer Expectations Management of Scrum #sgt2016
モックアップ共有のススメ
自動家(オートメーター)大地に立つ!! 〜オールドタイプの一年戦争〜
Shibuyatrac#13 scurmでやってみた
Jenkins 2を使った究極のpipeline ~ 明日もう一度来てください、本物のpipelineをお見せしますよ ~
「実録!となりのJenkins2.0」 - 第7回大阪 / 第9回(東京)Jenkins勉強会 #jenkinsstudy
Startup jenkins!
Jenkins User Conference 2012 Tokyo 「SIerのJenkins事情」
書類作成環境のあるべき論とは
よろしい、ならば自動化だっ! ~自動家の自動化哲学~ #AsianAA
第4回品川Redmine勉強会資料「チケット駆動開発のフレームワーク~現場の経験知からパターン言語へ(ベータ版)」
サラリーマンでギョーミーなプログラマ(つまりオレ)でも片手間で作れるXFD
邪道Jenkins
Jenkinsではじめる継続的インテグレーション
Jenkinsを導入する本当の理由を考えてみた
Ad

Similar to 20170809 start python_selenium (20)

PDF
初心者による初心者のためのRPA入門 ~Seleniumを使用したWebブラウザ操作の自動化~
PPTX
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
PDF
テスト駆動で行うネットワーク自動化のすすめ
PPTX
Selenium WebDriver + python で E2Eテスト自動化
PPTX
テストしなイカ? Seleniumで自動ブラウザテスト
PPTX
ローカル環境のテスト自動化【勉強会資料】
PDF
Web制作者視点で理解するソフトェアテスト
PPTX
WEB開発動作テストの自動化 を行うSeleniumの紹介
PDF
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
PDF
Azureを使って手軽にブラウザテストの自動化をはじめよう
PDF
DevOpsが引き金となるインフラエンジニアの進撃
PDF
ゼロからのプログラミングRails講座 Codeanywhere版
PPT
20120128 ci勉強会
PPTX
俺 と ご褒美 Bot
PDF
あなたの安心を高速に守る Container-based CI
PDF
遅延の少ないLivePreview方法
PPTX
FlexUnit4 & FlexMonkey を使おう
PPTX
PPT
ネットワーク分散型フレームワークConView
PDF
20170710 hifive-test-meetup
初心者による初心者のためのRPA入門 ~Seleniumを使用したWebブラウザ操作の自動化~
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
テスト駆動で行うネットワーク自動化のすすめ
Selenium WebDriver + python で E2Eテスト自動化
テストしなイカ? Seleniumで自動ブラウザテスト
ローカル環境のテスト自動化【勉強会資料】
Web制作者視点で理解するソフトェアテスト
WEB開発動作テストの自動化 を行うSeleniumの紹介
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
Azureを使って手軽にブラウザテストの自動化をはじめよう
DevOpsが引き金となるインフラエンジニアの進撃
ゼロからのプログラミングRails講座 Codeanywhere版
20120128 ci勉強会
俺 と ご褒美 Bot
あなたの安心を高速に守る Container-based CI
遅延の少ないLivePreview方法
FlexUnit4 & FlexMonkey を使おう
ネットワーク分散型フレームワークConView
20170710 hifive-test-meetup

20170809 start python_selenium