Selenium IDEでRsecを使う

Selenium IDEでRsecを使う

@blp1526

Selenium IDEのダウンロードから起動まで

ダウンロードからインストール

Selenium IDEの起動

  • Selenium IDEでテストを記録したいURLを開いておく
  • Firefoxの「ツール」からSelenium IDEを起動

ブラウザへの動作の記録

Selenium IDEの起動直後

  • 「Base URL」に現在開いているページが入力された状態
    • このURLに対してブラウザの動作を記録していく
  • 右上の赤いボタンが押下された状態
    • このボタンが押下されているとブラウザへの動作を記録できる

記録内容の確認と記録の中断

「テーブル」

  • ブラウザに対する動作は、IDEの「テーブル」に表示される
  • 「テーブル」には「コマンド」「対象」「値」が表示される

「テーブル」表示の具体例

  • Githubの検索フォームに「rspec」と入力した場合
    • 「コマンド」:type
    • 「対象」:name=q
    • 「値」:rspec
  • 「テーブル」横の「ソース」にxmlのソースが表示される
  • 記録を中断したくなったら、記録ボタンを押下

verifyとassert

右クリックからのverifyとassertの利用

どちらも確認のためのコマンドだが、挙動が異なる

  • verify
    • 期待した結果と異なる場合、赤にはなるが、処理は継続する
  • assert
    • 期待した結果と異なる場合、赤になり、処理は中断する

こんな感じで、後はコツコツとテストケースを作成していく

記録の再生

  • IDE左上の再生ボタンを押下
    • 押下すると、テーブルの実行中のコードの箇所が黄色くなる
    • 記録した内容と同一であれば、緑になる
    • 記録した内容と違っていれば、赤になる

以下、Rspecでテストケースを作成したい場合

  • Gemfileの作成
  • Rspecコードの生成

Gemfileの作成

  • チームで同じ環境になるようGemfileを作成する
source 'https://rubygems.org'
gem "rspec"
gem "selenium-webdriver"
gem "pry"

Rspecのコード生成

  • 「ファイル」 => 「テストケースをエクスポート」 => 「Ruby /Rspec /WebDriver」を選択してクリック
  • 拡張子を.rbにしてGemfileがあるフォルダに保存
    • 今回はgithub.rbで保存

生成されたRspecのコードは以下の通り

  • selenium-webdriverがrequireされる
require "selenium-webdriver"
require "rspec"
include RSpec::Expectations

前処理と後処理

describe "Github" do

  before(:each) do
    @driver = Selenium::WebDriver.for :firefox
    @base_url = "https://github.com"
    @accept_next_alert = true
    @driver.manage.timeouts.implicit_wait = 30
    @verification_errors = []
  end

  after(:each) do
    @driver.quit
    @verification_errors.should == []
  end

テスト処理

  it "test_github" do
    @driver.get(@base_url + "/")
    @driver.find_element(:link, "Search").click
    @driver.find_element(:name, "q").clear
    @driver.find_element(:name, "q").send_keys "rspec"
    @driver.find_element(:css, "button.button").click
    verify { (@driver.find_element(:name, "q").attribute("value")).should == "rspec" }
  end
# 以下略

beforeとafterの処理を改変する、など

  • 例えば、before処理としてログインを追加など
  • 例えば、after処理としてログアウトを追加など

実行

  • お決まりのbundle exec rspec github.rbで!
  • ブラウザが立ち上がり、テストが実行される