主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

WebアプリのテストにSeleniumを導入する

                
tags: Selenium
 継続的に改修依頼が来ているWebアプリにテストが組まれていなかった。そんでテストを導入した。ぼくの開発方法はたぶんTDDと呼ばれるものである。開発中にテストを必要に応じて行っているので、テストが主導だと大変面倒だと感じる。なのでクライアントサイドの動作確認にSeleniumを導入した。

 Seleniumとは、ざっくり言うとブラウザをスクリプトでコントロールしてしまおうというものである。なにか登録フォームを作ったとしたら、Seleniumでnameがほにゃららのとinputにほにゃららな値を入れて、submitボタンを押したことにして遷移画面をスクショで撮る、とかってことができる。
 以前はこういった役割にPhantomJSを使っていたが、PhantomJSというブラウザは一般的にない。SeleniumはFireFoxやクロームなどのドライバを入れれば、そのブラウザでテストができる。そういうわけでPhantomJSよりSeleniumを使うことにした。

 とりあえずSeleniumを使ってFireFoxのコントロールまでを今回はやる。

 まずインストールから。
 ぼくの導入タイミングでは、日本で作られたSeleniumの紹介サイトがだいぶふるいものになっていたので本家を参考にした。
http://www.seleniumhq.org
 コントロールに使う言語はスクリプト系やらなんやら選べるが、今回はC#。ということでVisualStudioを開いて、C#でコンソールアプリケーションのプロジェクトを新規作成する。
 続いてNugetでSeleniumパッケージを入れる。たぶんVisualStudioの真ん中下段にパッケージマネージャーコンソールというのがあるので、そこに下記を打ち込んでインストールされることを確認する。
Install-Package Selenium.WebDriver
Install-Package Selenium.Support


 以上でSeleniumを使う準備は整う。オブジェクトエクスプローラでWebDriverを見てみると、いろいろなブラウザが使えるようになっているのがわかるはず。あとは下記のコードをビルドでもして試してみる。Bingに検索キーワードを入れ、結果を見たりするようになっている。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;

namespace PlaySelenium
{
class Program
{
private static FirefoxDriver driver;
private static LogWriter log = new LogWriter("Selenium Test Sample");

static void Main(string[] args)
{
var url = "http://bing.com";

driver = new FirefoxDriver();

// Go to the home page
driver.Navigate().GoToUrl(url);

driver.FindElement(By.Id("sb_form_q")).SendKeys("selenium test");
driver.FindElement(By.Name("go")).Click();

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(1));
wait.Until(ExpectedConditions.TitleContains("selenium test"));
driver.GetScreenshot().SaveAsFile("screen1.png", System.Drawing.Imaging.ImageFormat.Png);

driver.FindElement(By.ClassName("sb_pagN")).Click();
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(1));
wait.Until(ExpectedConditions.TitleContains("selenium test"));
driver.GetScreenshot().SaveAsFile("screen2.png", System.Drawing.Imaging.ImageFormat.Png);

driver.FindElement(By.ClassName("sb_pagN")).Click();
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(1));
wait.Until(ExpectedConditions.TitleContains("selenium test"));
driver.GetScreenshot().SaveAsFile("screen3.png", System.Drawing.Imaging.ImageFormat.Png);

driver.FindElement(By.Id("sb_form_q")).SendKeys(" sample");
driver.FindElement(By.Name("go")).Click();


AssertEqual(driver.Title.Contains("selenium"), true);


//File.WriteAllText("result.txt", result);

log.Close();
driver.Quit();
driver.Dispose();
}


private static void AssertEqual(string a, string b)
{
if (a == b)
{
return;
}
else
{
var output = $"Test failed!\n" +
$"Page Title: {driver.Title}\n" +
$"URL: {driver.Url}\n" +
$"'AssertEqual' failed: {a} != {b}";
Console.WriteLine(output);
log.Add(output);
log.Close();
driver.Dispose();
Environment.Exit(1);
}
}

private static void AssertEqual(bool a, bool b)
{
if (a == b)
{
return;
}
else
{
var output = $"Test failed!\n" +
$"Page Title: {driver.Title}\n" +
$"URL: {driver.Url}\n" +
$"'AssertEqual' failed: {a} != {b}";
Console.WriteLine(output);
log.Add(output);
log.Close();
driver.Dispose();
Environment.Exit(1);
}
}
}
}

 
スポンサーサイト



プロフィール

h

Author:h

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon