@ledsun blog

無味の味は佳境に入らざればすなわち知れず

SeleniumIDEでC#(WebDervier用)のテストケースを書く

SeleniumIDEはブラウザ操作を記録してSelenium用のテストケースを作成してくれるFirefoxプラグインです。実際にSeleniumIDEを動かしてC#のテストケースを作成してみましょう。

SeleniumIDEを起動します。

Firefoxのメニューから「Web 開発」>「Selenium IDE」を選択します。

起動直後

1秒くらいでSeleniumIDEが起動します。

操作の記録

起動した時点で記録が開始されているので、Firefoxのウィンドウを選択して記録したい操作を実行します。

  1. googleに移動して
  2. Cheese!を検索します。

記録した後

SeleniumIDEのウィンドウに切り替えると操作内容が追加されています。

  • Base URLに操作したページが
  • テーブルに操作内容が

ここで赤い丸ボタンを押して記録を停止します。

エクスポート

「ファイル(F)」>「テストケースをエクスポート(E) 」>「C#(WebDriver)」を選択し操作内容をC#で出力します。

次のソースが作成さできます。

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;

namespace SeleniumTests
{
    [TestFixture]
    public class Testcase
    {
        private IWebDriver driver;
        private StringBuilder verificationErrors;
        private string baseURL;
        
        [SetUp]
        public void SetupTest()
        {
            driver = new FirefoxDriver();
            baseURL = "http://www.google.co.jp/";
            verificationErrors = new StringBuilder();
        }
        
        [TearDown]
        public void TeardownTest()
        {
            try
            {
                driver.Quit();
            }
            catch (Exception)
            {
                // Ignore errors if unable to close the browser
            }
            Assert.AreEqual("", verificationErrors.ToString());
        }
        
        [Test]
        public void TheCaseTest()
        {
            driver.Navigate().GoToUrl("/");
            driver.FindElement(By.Id("lst-ib")).Clear();
            driver.FindElement(By.Id("lst-ib")).SendKeys("Cheese!");
        }
        private bool IsElementPresent(By by)
        {
            try
            {
                driver.FindElement(by);
                return true;
            }
            catch (NoSuchElementException)
            {
                return false;
            }
        }
    }
}

テストケースの修正

このままでは操作対象のページに遷移しないため、上手く動きません。以下の行を書き換えます。

//driver.Navigate().GoToUrl("/");
driver.Navigate().GoToUrl(baseUrl);

さらに起動するブラウザをIEに変えて、使っていないメソッドを削除するなどして整形すると以下のソースになります。

using System;
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;

namespace SeleniumTests
{
    [TestFixture]
    public class Testcase
    {
        private IWebDriver driver;

        [SetUp]
        public void SetupTest()
        {
            driver = new InternetExplorerDriver();
        }

        [TearDown]
        public void TeardownTest()
        {
            try
            {
                driver.Quit();
            }
            catch (Exception)
            {
                // Ignore errors if unable to close the browser
            }
        }

        [Test]
        public void TheCaseTest()
        {
            driver.Navigate().GoToUrl("http://www.google.co.jp/");
            driver.FindElement(By.Id("lst-ib")).Clear();
            driver.FindElement(By.Id("lst-ib")).SendKeys("Cheese!");
        }
    }
}

まとめ

SeleniumIDEを使うと、以上のようにブラウザ上で操作したものをスクリプトに記録することができます。まるでExcelの操作を記録してVBAマクロを作っているかのようです。後から見ると、MicrosoftがIEにこの機能を乗せなかったことが不思議です。ただ、VBAを出力される機能を付けられてそれがスタンダードになっても、それはそれで困ります。結果的によかったのだと思います。
NUnitを使うようなソース出力してくれるので既存のテスト実行環境に組み込みやすいと思います。