自動化されたWebアプリケーションテスト(MS単体テストフレームワーク+ Selenium WebDriver C#)。 パート4:最後にテストを書く

画像

はじめに


こんにちは さて、最後の部分が来たので、記事の前の部分のラッパーを使用して作成された簡単なテストの例を示します。 約束どおり、フレームワークの作業バージョンへのパブリックアクセスを許可します(リンクを参照)。



参照資料


パート1:はじめに

パート2.1:Selenium APIラッパー-ブラウザー

パート2.2:Selenium APIラッパー-WebElement

パート3:WebPages-ページの説明

パート4:最後にテストを書く

フレームワークの公開



行こう


そのため、トレーニング資料として、Google翻訳者のいくつかのテストを作成します。 テストカバレッジを行うつもりはないので、4つのシナリオを考え出しました。



メインページは非常にシンプルです-入力フィールドと翻訳結果があります。 翻訳を実行するには、「翻訳」ボタンをクリックする必要さえありません。 ページの説明は次のようになりました。

namespace Autotests.WebPages.Root { public class Index : PageBase { #region Elements private static readonly WebElement SourceEdit = new WebElement().ById("source"); private static readonly WebElement ResutlText = new WebElement().ById("result_box"); private static readonly WebElement ClearButton = new WebElement().ById("clear"); private static readonly WebElement WebsiteTranslatorLink = new WebElement() .ByAttribute(TagAttributes.Href, Pages.Manager.Websites.Index.BaseUrl.ToString(), exactMatch: false); #endregion public void Open(string from, string to) { Contract.Requires(from != to); var url = new Uri(string.Format("{0}#{1}/{2}/", BaseUrl, from, to)); Navigate(url); } public string SourceText { get { return SourceEdit.Text; } } public string ResultText { get { return ResutlText.Text; } } public string Translate(string text) { SourceEdit.Text = text; if (!string.IsNullOrEmpty(text)) { Contract.Assert(WaitHelper.SpinWait(() => !string.IsNullOrEmpty(ResutlText.Text), TimeSpan.FromSeconds(10))); } return ResultText; } public void Clear() { Contract.Assert(ClearButton.Exists(10)); ClearButton.Click(useJQuery: false); } public void OpenWebsiteTranslator() { WebsiteTranslatorLink.Click(useJQuery: false); } } }
      
      





4つの要素について説明しましたが、3つはid、4つ目はhref属性のリンクの出現によって配置されています。 このクラスはPageBaseから継承され、そのコードは前の記事で説明されており、公開されています。 オーバーロードされたOpenメソッドは、en-ruなどの言語を示すトランスレーターを開くことができます。 さて、このクラスには、前述のスクリプトの自動化の一部として必要なすべての機能も含まれています。



2番目のページの説明も行います-サイト翻訳者:

 namespace Autotests.WebPages.Root.Manager.Website { public class Index : PageBase { } }
      
      





クラスは空です。テストでは、ページが開いたことを確認するだけでよいため、アクションは実行されません。



テスト


まず、基本クラスを作成します。

 namespace Autotests.Suites { [TestClass] public abstract class SuiteBase { public TestContext TestContext { get; set; } [TestInitialize] public void TestInitialize() { Browser.Start(); } [TestCleanup] public void TestCleanup() { Browser.Quit(); } } }
      
      





このクラスは、各テストの前提条件と事後条件を定義します。この場合、ブラウザーを開いたり閉じたりします。 開く必要はなく、最初にアクセスしたときにブラウザが開きます。 TestInitializeとTestCleanupに加えて、ClassInitializeとClassCleanupもありますが、これらは事前条件と事後条件も満たしますが、同じクラスのテストのグループが一緒に(連続して)実行される場合に使用します。 TestContextは、すべてのテストが、たとえば、ファイルを結果に添付するために使用できるようにも定義されています。



そして最後に、テスト用のコード:

 namespace Autotests.Suites { [TestClass] public class GoogleTranslateTests : SuiteBase { [TestMethod] public void TranslateText() { #region TestData const string languageFrom = "en"; const string languageTo = "ru"; const string textEn = "hello"; const string textRu = ""; #endregion Pages.Index.Open(languageFrom, languageTo); var result = Pages.Index.Translate(textEn); Assert.AreEqual(textRu, result, string.Format("{0} != {1}.", textRu, result)); } [TestMethod] public void CheckJavaScriptEscape() { #region TestData const string languageFrom = "en"; const string languageTo = "en"; const string javascript = "alert(1);"; #endregion Pages.Index.Open(languageFrom, languageTo); var result = Pages.Index.Translate(javascript); Assert.AreEqual(javascript, result, "JavaScript was executed."); } [TestMethod] public void ClearSourceText() { Pages.Index.Open(); Pages.Index.Translate(RandomHelper.RandomString); Pages.Index.Clear(); Assert.IsTrue(string.IsNullOrEmpty(Pages.Index.SourceText), "Source text was not cleared."); } [TestMethod] public void NavigateWebsiteTranslator() { Pages.Index.Open(); Pages.Index.OpenWebsiteTranslator(); Assert.IsTrue(Browser.Url.Contains(Pages.Manager.Websites.Index.BaseUrl), "WebsiteTranslator was not opened."); } } }
      
      







1つのテストで1つの論理アクションを検証します。 テストデータはテストに含まれていますが、XML、データベース、その他のリポジトリなど、どこにでも保存できます。 DDT へのリンクも提供します方法:データ駆動型ユニットテストを作成する



おわりに


記事を読んで質問をし、提案をしてくれたみんなに感謝します! これで私の話は終わりです。ロシア語の情報や例はほとんどないので、RuNetのSelenium C#でWebアプリケーションの自動テストについて話を終えることができてとても嬉しいです。 頑張って



All Articles