Selenium WebDriverで
FreeBSD 10.2 の
Google Chrome を
自動実行
東平洋史
Seleniumとは?
• 原子番号34の元素
• 元素記号はSe
• 第16族元素
– 酸素と同族
– ハロゲンの隣
• 灰色セレン
– 金属セレン
– 六方晶系
– 融点は217.4℃
• 赤色セレン
– 単斜晶系
では
なくて
Seleniumとは?
http://docs.seleniumhq.org/
• Webベースアプリケーション用テスト
自動化ツール
• ライセンスはApache 2.0 License
Selenium WebDriver
http://docs.seleniumhq.org/projects/webdriver/
• プログラムからWebブラウザ制御
• 制御可能ブラウザ
– Mozilla Firefox, Google Chrome(Linux, Windows,
MacOS, Android), Internet Explorer, Safari, Edge
• 使用可能言語
– Java, Ruby, Python, C#, Javascript(Node.js)など
• OS
– Linux, MacOS, Windowsなど
2016年
1月2日
SNSを
みていたら
https://twitter.com/satokaz/status/682910995040190464
Solarisでも
Node.js
動くんだ
という
ことは
Solarisでも
WebDriver
動くのでは?
という
わけで
調べて
みました
Solaris 11.3(x86)の
Selenium WebDriver 稼働状況
Mozilla
Firefox
Selenium Grid
Google
Chrome
Internet
Explorer
Android
Python ○ ○ ○ ○
Ruby △ ○ ○ ○
Java ○ ○ ○ ○
○:可動 △:一部可動
他の
OSは?
FreeBSD 10.2(amd64 or i386)の
Selenium WebDriver稼働状況
Mozilla
Firefox
Selenium Grid
Google
Chrome
Internet
Explorer
Android
Python ○ ○ ○ ○
Ruby ○ ○ ○ ○
Java ○ ○ ○ ○
Node.js ○ ○ ○ ○
○:可動 △:一部可動
Google
Chromeは?
調べて
みました
Google Chromeを自動実行する方法
Selenium
ライブラリ
ChromeDriver
言語処理系
https://sites.google.com/a/chromium.org/chromedriver/
Google ChromeとFreeBSD
Selenium
ライブラリ
ChromeDriver
言語処理系
FreeBSD用あり
Google ChromeとFreeBSD
Selenium
ライブラリ
ChromeDriver
言語処理系
FreeBSD用あり
FreeBSDで
可動
という
ことは
動か
せる?
と思ったが
Google ChromeとFreeBSD
Selenium
ライブラリ
ChromeDriver
言語処理系
FreeBSD用あり
FreeBSDで
可動
FreeBSD用
なし
終了
orz
では
ない
ChromeDriver対応状況
バイナリが存在するOS
• Windows(32bit)
• Mac(32bit)
• Linux(32bit/64bit)
ChromeDriver対応状況
バイナリが存在するOS
• Windows(32bit)
• Mac(32bit)
• Linux(32bit/64bit) ← 使おう
Google Chrome自動実行の方針
Selenium
ライブラリ
ChromeDriver
言語処理系
FreeBSD用パッケージ使用
Linux用バイナリ
&
Linuxエミュレータ
使用
FreeBSD用使用
FreeBSD 10.2(amd64 or i386)
検証手順
• X Window整備
• Webブラウザ整備
• ChromeDriver整備
• 各プログラミング言語開発環境整備
– Python
– Ruby
• Selenium WebDriver ライブラリインストール
• プログラム改造
• プログラム実行
FreeBSD 10.2(amd64 or i386)
本資料の説明範囲
• Webブラウザ整備
– Google Chromeのインストール
– /etc/sysctl.conf の設定
– /usr/local/bin/chromeの改造
• ChromeDriver整備
– Linuxエミュレータのインストール
– ChromeDriverのバイナリの設置
– Linux用シェアードライブラリの追加
• テストスクリプト改造
Webブラウザの整備(1)
Google Chrome のインストール
• Ports Collectionの場合
# cd /usr/ports/www/chromium
# make install clean
• Packageの場合
# pkg install www/chromium
Webブラウザの整備(2)
/etc/sysctl.confの設定
• 次の行を追記
kern.ipc.shm_allow_removed=1
Webブラウザ
準備完了
ChromeDriverの整備(1)
Linux バイナリ互換機能の有効化
• /etc/rc.conf に次の行を追記
linux_enable="YES"
ChromeDriverの整備(2)
Linuxエミュレータ のインストール
linux_base-c6を使用。CentOSベース。
• Ports Collectionの場合
# cd /usr/ports/emulators/linux_base-c6
# make install clean
• Packageの場合
# pkg install emulators/linux_base-c6
ChromeDriverの整備(3)
ChromeDriverのバイナリの設置
1. バイナリを次のサイトからとってくる
Linux 32bit用を使用
https://sites.google.com/a/chromium.org/chromedriver/do
wnloads
2. LinuxのELFバイナリのbrandingをする
# brandelf -t Linux chromedriver
ChromeDriverの整備(4)
Linux用シェアードライブラリの追加
• この作業が一番大変
• 追加手順
1. chromedriverが使用するシェアードライブラリを調べる
% ldd chromedriver
2. 存在しない or 古いライブラリを追加する
1. 該当ライブラリを含むCentOS 6用パッケージrpmを探す
2. rpmファイルからライブラリを取り出す
# cd /compat/linux
# rpm2cpio rpmファイル | cpio -id
3. ライブラリが揃うまで 1 – 3 を繰り返す。
必要なRPMファイル
RPMファイル ライブラリ 備考
GConf2-2.28.0-6.el6.i686.rpm libgconf-2.so.4
ORBit2-2.14.17-5.el6.i686.rpm libORBit-2.so.0 libgconf-2.so.4 が参照
dbus-libs-1.2.24-8.el6_6.i686.rpm libdbus-1.so.3 libgconf-2.so.4 が参照
libX11-1.6.0-6.el6.i686.rpm libX11.so.6
libXau-1.0.6-4.el6.i686.rpm libXau.so.6 libxcb.so.1 が参照
libstdc++-4.8.5-4.el7.i686.rpm libstdc++.so.6 GLIBCXX_3.4.15 および
CXXABI_1.3.5 が必要なため
libxcb-1.9.1-3.el6.i686.rpm libxcb.so.1 libX11.so.6 が参照
nspr-4.10.8-1.el6_6.i686.rpm libnspr4.so
nss-3.18.0-5.3.el6_6.i686.rpm libnss3.so
libsmime3.so
nss-util-3.18.0-1.el6_6.i686.rpm libnssutil3.so
ChromeDriver
準備完了
テストスクリプト
改造
テストスクリプト改造(1)
WebDriver生成手順を次のようにする
1. ChromeDriverとして先程作成した
ChromeDriver.sh のパスを指定する。
2. WebDriverを作る。
テストスクリプト改造(2)
• Pythonの場合
driver =
webdriver.Chrome(
'/path/to/chromedriver.sh')
テストスクリプト改造(3)
• Rubyの場合
Selenium::WebDriver::Chrome
::Service.executable_path =
/path/to/chromedriver.sh'
driver =
Selenium::WebDriver.for :chrome,
:switches
=> %w[--ignore-certificate-errors
--disable-popup-blocking
--disable-translate]
テストスクリプト改造(4)
• Javaの場合
System.setProperty(
"webdriver.chrome.driver",
“/path/to/chromedriver.sh");
driver = new ChromeDriver();
テストスクリプト改造(5)
• Node.js (WebDriverJS) の場合
var chrome = require('selenium-webdriver/chrome');
var service =
new chrome.ServiceBuilder(
'/path/to/chromedriver.sh')
.build();
chrome.setDefaultService(service);
driver = new webdriver.Builder()
.withCapabilities(webdriver.Capabilities.chrome())
.build();
ここで
実習
実習内容
次のテストを行なうスクリプトの作成
1. Googleで「小江戸らぐ」を検索
2. 次のページを表示
OSS支える!コミュニティー訪問~小江戸らぐ
- 川越を中心にゆるく活動するLinuxユー
ザー会
3. 写真をクリックして拡大表示
© 日経BP社http://itpro.nikkeibp.co.jp/article/COLUMN/20131003/508665/
JavaでGoogle Chromeを操作
まとめ
FreeBSD 10.2(amd64 or i386)でもGoogle
Chromeの自動実行可能
• Google ChromeはFreeBSD用バイナリ使用
• ChromeDriverはLinux 32bit版バイナリ使用
• 環境変数LD_LIBRARY_PATHの設定が適宜必
要
– Google ChromeはFreeBSD用ライブラリを使う
– ChromeDriverはLinux 32bit用ライブラリを使う
おしまい
(^.^)/~~~

Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行