Всем привет. Недавно один с моих подписчиков попросил показать реализацию паттерна Page Object и C# для автоматизации сайта с использование Selenium Webdriver. Немного ранее было рассмотрено применение для java. Приведу пример и для С#.
На примере простенького функционала поиска в Bing создадим проект “Unit Test Project” в Visual Studio.
Нам понадобится добавить следующие классы:
- Page Object (BingMainPage) – содержит свойства всех элементов на странице. Также он включает все необходимые действия (Search, Navigate) и валидацию.
- UI Tests (BingTests) – содержит сам тест и объект предыдущего класса.
Также нам понадобится добавить библиотеки Selenium к нашему проекту: выберите References -> Manage NuGet Packages…
Тест будет выполнять переход на Bing, поиск определенного словосочетания и проверять количество результатов. Для этого нам понадобится всего лишь 2 класса: BingMainPage и BingTests.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Support.PageObjects; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PageObjectPattern { public class BingMainPage { private readonly IWebDriver driver; private readonly string url = @"http://www.bing.com/"; public BingMainPage(IWebDriver browser) { this.driver = browser; this.driver.Manage().Window.Maximize(); PageFactory.InitElements(browser, this); } [FindsBy(How = How.Id, Using = "sb_form_q")] public IWebElement SearchBox { get; set; } [FindsBy(How = How.Id, Using = "sb_form_go")] public IWebElement GoButton { get; set; } [FindsBy(How = How.Id, Using = "b_tween")] public IWebElement ResultsCountDiv { get; set; } public void Navigate() { this.driver.Navigate().GoToUrl(this.url); } public void Search(string textToType) { this.SearchBox.Clear(); this.SearchBox.SendKeys(textToType); this.GoButton.Click(); } public void ValidateResultsCount(string expectedCount) { Assert.IsTrue(this.ResultsCountDiv.Text.Contains(expectedCount), "The results DIV doesn't contains the specified text."); } } } |
Можно увидеть, что поиск элементов выполняется с помощью следующей конструкции: