Пример авто-теста на Selenium RC (С#)

В данной заметке я пообещал написать простейший тест на Selenium RC. С большим опозданием, но все же постараюсь сдержать обещание. В качестве среды разработки будем использовать Visual Studio, язык программирования С#. Порядок действий будет таковым:

Дополнительно рекомендую скачать и установить для Visual Studio NUnit . NUnit удобно использовать для организации тестов.

Далее открываем Visual Studio и создаем новый проект типа Class Library, создаем тестовый класс. Не забываем добавить в проект требуемые тестовые библиотеки — nmock.dll, nunit.core.dll, nunit. framework.dll, ThoughtWorks.Selenium.Core.dll, ThoughtWorks.Selenium.IntegrationTests.dll и ThoughtWorks.Selenium.UnitTests.dll. Подробный пример тут.

После этих нехитрых действий можно приступать к созданию тестового скрипта. В качестве примера будет использовать тест описанный здесь.

Шаги теста:

  • Открыть страницу http://bugscatcher.net/;
  • Проверить страницу на наличие текста “Bugs Catcher”;
  • Нажать по ссылке “Bugs Catcher”;
  • Проверить наличие элемента на странице для ввода текста поиска;
  • Произвести поиск по тексту “Пишем тесты на Selenium IDE”;
  • Проверить наличие ссылки на станице “Пишем тесты на Selenium IDE”.

С помощью Selenium IDE запишем требуемые шаги теста. Затем с помощью «Options/Format» попросим Selenium IDE отобразить тесты в формате C#. Сохраняем тест в студии, получаем примерно такой класс:

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
52
53
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using Selenium;
 
namespace SeleniumTests
{
    [TestFixture]
    public class Untitled
    {
        private ISelenium selenium;
        private StringBuilder verificationErrors;
 
        [SetUp]
        public void SetupTest()
        {
            selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://bugscatcher.net/");
            selenium.Start();
            verificationErrors = new StringBuilder();
        }
 
        [TearDown]
        public void TeardownTest()
        {
            try
            {
                selenium.Stop();
            }
            catch (Exception)
            {
                // Ignore errors if unable to close the browser
            }
            Assert.AreEqual("", verificationErrors.ToString());
        }
 
        [Test]
        public void TheUntitledTest()
        {
           selenium.Open("http://bugscatcher.net/");   //открытие страницы
           selenium.WaitForPageToLoad("60000"); //ждем загрузки страницы         
           Assert.IsTrue(selenium.IsTextPresent("Bugs Catcher"));  //проверяем наличие текстового элемента "Bugs Catcher" на странице
           selenium.Click("link=Bugs Catcher"); //нажимаем на ссылку "Bugs Catcher"
           selenium.WaitForPageToLoad("60000"); //ждем загрузки страницы    
           Assert.IsTrue(selenium.IsElementPresent("s")); //проверяем, присутствует ли на станице элемент ввода текста для  поиска
           selenium.Type("s", "Пишем тесты на Selenium IDE"); //вводим в текстовое поле значение "Пишем тесты на Selenium IDE"
           selenium.Click("searchsubmit");   //нажимаем на кнопку поиска (лупа)
           selenium.WaitForPageToLoad("60000");  //ждем загрузки страницы
           Assert.IsTrue(selenium.IsElementPresent("link=Пишем тесты на Selenium IDE"));  //проверяем, есть ли на странице результатов ссылка "Пишем тесты на  IDE"
        }
    }
}
using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using NUnit.Framework;
using Selenium;

namespace SeleniumTests
{
    [TestFixture]
    public class Untitled
    {
        private ISelenium selenium;
        private StringBuilder verificationErrors;

        [SetUp]
        public void SetupTest()
        {
            selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://bugscatcher.net/");
            selenium.Start();
            verificationErrors = new StringBuilder();
        }

        [TearDown]
        public void TeardownTest()
        {
            try
            {
                selenium.Stop();
            }
            catch (Exception)
            {
                // Ignore errors if unable to close the browser
            }
            Assert.AreEqual("", verificationErrors.ToString());
        }

        [Test]
        public void TheUntitledTest()
        {
           selenium.Open("http://bugscatcher.net/");   //открытие страницы
           selenium.WaitForPageToLoad("60000"); //ждем загрузки страницы         
           Assert.IsTrue(selenium.IsTextPresent("Bugs Catcher"));  //проверяем наличие текстового элемента "Bugs Catcher" на странице
           selenium.Click("link=Bugs Catcher"); //нажимаем на ссылку "Bugs Catcher"
           selenium.WaitForPageToLoad("60000"); //ждем загрузки страницы    
           Assert.IsTrue(selenium.IsElementPresent("s")); //проверяем, присутствует ли на станице элемент ввода текста для  поиска
           selenium.Type("s", "Пишем тесты на Selenium IDE"); //вводим в текстовое поле значение "Пишем тесты на Selenium IDE"
           selenium.Click("searchsubmit");   //нажимаем на кнопку поиска (лупа)
           selenium.WaitForPageToLoad("60000");  //ждем загрузки страницы
           Assert.IsTrue(selenium.IsElementPresent("link=Пишем тесты на Selenium IDE"));  //проверяем, есть ли на странице результатов ссылка "Пишем тесты на  IDE"
        }
    }
}

В коде теста не должно возникнуть особых проблем, но все же немного поясню. Код теста делится на явные блоки — в [SetUp] создаем объект selenuim (он отвечает за работу с браузером), указываем тестовые параметры — сервер, порт, тестовый браузер и урл приложения.

1
2
3
4
5
6
7
        [SetUp]
        public void SetupTest()
        {
            selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://blogs.logicsoftware.net/");
            selenium.Start();
            verificationErrors = new StringBuilder();
        }
        [SetUp]
        public void SetupTest()
        {
            selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://blogs.logicsoftware.net/");
            selenium.Start();
            verificationErrors = new StringBuilder();
        }

Teardown:

1
2
3
4
5
6
7
8
9
10
11
12
13
        [TearDown]
        public void TeardownTest()
        {
            try
            {
                selenium.Stop();
            }
            catch (Exception)
            {
                // Ignore errors if unable to close the browser
            }
            Assert.AreEqual("", verificationErrors.ToString());
        }
        [TearDown]
        public void TeardownTest()
        {
            try
            {
                selenium.Stop();
            }
            catch (Exception)
            {
                // Ignore errors if unable to close the browser
            }
            Assert.AreEqual("", verificationErrors.ToString());
        }

Ну и непосредственно сам тест (производимые действия в тесте):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
        [Test]
        public void TheUntitledTest()
        {
           selenium.Open("http://bugscatcher.net/");   //открытие страницы
           selenium.WaitForPageToLoad("60000"); //ждем загрузки страницы         
           Assert.IsTrue(selenium.IsTextPresent("Bugs Catcher"));  //проверяем наличие текстового элемента "Bugs Catcher" на странице
           selenium.Click("link=Bugs Catcher"); //нажимаем на ссылку "Bugs Catcher"
           selenium.WaitForPageToLoad("60000"); //ждем загрузки страницы    
           AssertTrue(selenium.IsElementPresent("s")); //проверяем, присутствует ли на станице элемент ввода текста для  поиска
           selenium.Type("s", "Пишем тесты на Selenium IDE"); //вводим в текстовое поле значение "Пишем тесты на Selenium IDE"
           selenium.Click("searchsubmit");    //нажимаем на кнопку поиска (лупа)
           selenium.WaitForPageToLoad("60000");  //ждем загрузки страницы
           Assert.IsTrue(selenium.IsElementPresent("link=Пишем тесты на Selenium IDE"));  //проверяем, есть ли на странице результатов ссылка "Пишем тесты на  IDE"
        }
        [Test]
        public void TheUntitledTest()
        {
           selenium.Open("http://bugscatcher.net/");   //открытие страницы
           selenium.WaitForPageToLoad("60000"); //ждем загрузки страницы         
           Assert.IsTrue(selenium.IsTextPresent("Bugs Catcher"));  //проверяем наличие текстового элемента "Bugs Catcher" на странице
           selenium.Click("link=Bugs Catcher"); //нажимаем на ссылку "Bugs Catcher"
           selenium.WaitForPageToLoad("60000"); //ждем загрузки страницы    
           AssertTrue(selenium.IsElementPresent("s")); //проверяем, присутствует ли на станице элемент ввода текста для  поиска
           selenium.Type("s", "Пишем тесты на Selenium IDE"); //вводим в текстовое поле значение "Пишем тесты на Selenium IDE"
           selenium.Click("searchsubmit");    //нажимаем на кнопку поиска (лупа)
           selenium.WaitForPageToLoad("60000");  //ждем загрузки страницы
           Assert.IsTrue(selenium.IsElementPresent("link=Пишем тесты на Selenium IDE"));  //проверяем, есть ли на странице результатов ссылка "Пишем тесты на  IDE"
        }

Вот и написали простейший тест на Selenium RC (C#) 🙂

Теперь попробуем запустить разработанный тест. Перед этим сбилдите проект в Visual Studio (F6) и проверьте, что нет ошибок. Если все хорошо идем дальше, если нет пишите в комменты или на email.

Для запуска тестов, нам понадобиться установить NUnit. NUnit — это вспомогательный framework для создания тестов. Рекомендую вам изучить возможности NUnit. Скачать NUnit можно по этой ссылке. После установки:

  • Запускаем Selenium Server;
  • Запускаем NUnit;
  • В NUnit выбираем «File -> Open Project…»;
  • И в диалоговом окне указываем путь к .dll нашего теста (…binDebugSeleniumTest.dll);
  • Загружаем проект и нажимает кнопку «Run» (ее будет трудно не заметить).

В результате данных, не хитрых, действий должен запуститься написанный нами ранее авто-тест на Selenium. Примерно так должно выглядеть окно NUnit-а с загруженным тестом:

NUnit

Удачи в освоении RC!