Browserstack Screenshot APIを使ってみたので、まとめておきます。
まずRuby Clientをインストールします。
gem install "browserstack-screenshot"
そして、以下の容量でscreenshotが取得できます。
# Screenhost APIの初期化
config = { username: Settings.browserstack.username, password: Settings.browserstack.password }
client = Screenshot::Client.new(config)
# Browser APIの結果はObject Arrayなので、`Windows_XP_chrome_35.0`のようなキーのマップに変換しておく
all_browsers = client.get_os_and_browsers.inject({}) do |data, browser|
key = browser.slice(:device, :os, :os_version, :browser, :browser_version).select{ |k, v| v.to_s != "" }.map{ |k, v| v.to_s.gsub(/\s+/, "-").gsub(/[^a-zA-Z0-9.\-]/, "") }.join("_")
data[key] = browser
data
end
# 実際はここでファイルに保存等しておく
# browser名をキーに設定を構築する
browsers = (ENV["BROWSERSTACK_BROWSERS"] || "OS-X_Lion_firefox_37.0").split(",").map { |name| all_browsers[name] }
request = {
url: "http://www.google.com/",
win_res: ENV["BROWSERSTACK_WINDOWS_RESOLUTION"], #Options : "1024x768", "1280x1024"
mac_res: ENV["BROWSERSTACK_MAC_RESOLUTION"], #Options : "1024x768", "1280x960", "1280x1024", "1600x1200", "1920x1080"
quality: "compressed",
wait_time: 10,
orientation: ENV["BROWSERSTACK_ORIENTATION"], #Options: "portrait", "landscape"
browsers: browsers
}
# Screenshotの取得
request_id = @client.generate_screenshots(request)
while @client.screenshots_status(request_id) != "done"
sleep 5
end
results = @client.screenshots(request_id)
results[:image_url]
これだけです。
実際の画像ファイルはブラウザスタック側にあるので、以下のようにindexファイルを作ってあげると見栄えが良いです。
Screenshotを取って来てS3にindexファイルをアップするサンプルRakeタスクをGithubにあげました。