public
Created

Пример 01: Первоначальный тест кейс + все необходимые декларации страницы Google.

  • Download Gist
Test.01.cs
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using System.Collections.Generic;
using System;
using NUnit.Framework;
 
namespace Selenium.Two.DotNetExample
{
[TestFixture]
class TestGoogle_Initial
{
IWebDriver driver;
 
[SetUp]
public void Setup()
{
driver = new InternetExplorerDriver();
}
 
[TearDown]
public void Teardown()
{
driver.Quit();
}
 
// =================== Google page ==================================
public class GoogleSearchPage
{
IWebDriver drv;
 
string DefaultUrl = "http://www.google.com";
 
public IWebElement QueryBox { get { return drv.FindElement(By.Name("q")); } }
 
 
public GoogleSearchPage(IWebDriver drv)
{
this.drv = drv;
}
 
public void Show()
{
Show(DefaultUrl);
}
 
public void Show(string url)
{
//Navigate to the site
drv.Navigate().GoToUrl("http://www.google.com");
}
 
public void Search(string searchPhrase)
{
Show();
//Work with the Element that's on the page
QueryBox.SendKeys(searchPhrase);
QueryBox.SendKeys(Keys.Enter);
System.Threading.Thread.Sleep(2000);
}
}
// =================== TESTS ==================================
 
[Test]
public void TestSearchGoogleForThisIsATest()
{
// Actual: "this is a test - Поиск в Google"
// * Arrange
IWebDriver selenium = new InternetExplorerDriver();
var googlePage = new GoogleSearchPage(selenium);
 
string googleSearchPhrase = "This is a test";
 
// * Act
googlePage.Search(googleSearchPhrase);
 
// * Assert
// 1. Should contain the search phrase
StringAssert.Contains(googleSearchPhrase, selenium.Title);
 
// 2. Should contain our Company name
StringAssert.Contains("Google", selenium.Title);
}
 
}
}
Test.02.cs
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
// Пример 02: Использование константы isBOOGLE_01_fixed.
// Примечание: Все константы должны храниться в отдельном файле, специально предназначенном для хранения констант для обходов. В данном примере, только ради укрощения, константа объявляется рядом с тест-кейсом.
 
// Google Instant search should not always display the search phrase in lower case
const bool isBOOGLE_01_fixed = false;
 
// =================== TESTS ==================================
[Test]
public void TestSearchGoogleForThisIsATestWorkaround00()
{
// Actual: "this is a test - Поиск в Google"
// * Arrange
IWebDriver selenium = new InternetExplorerDriver();
var googlePage = new GoogleSearchPage(selenium);
string googleSearchPhrase = "This is a test";
 
if (!isBOOGLE_01_fixed)
{
Console.WriteLine("Workaround for BOOGLE-01 Google Instant search should not always display the search phrase in lower case");
googleSearchPhrase = googleSearchPhrase.ToLower();
}
 
// * Act
googlePage.Search(googleSearchPhrase);
 
// * Assert
// 1. Should contain the search phrase
StringAssert.Contains(googleSearchPhrase, selenium.Title);
 
// 2. Should contain our Company name
StringAssert.Contains("Google", selenium.Title);
}
Test.03.cs
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
// Пример 03: Усовершенствованный пример с использованием списка обходов и метода UseWorkAround
// Примечание: Все константы, список обходов и функции для работы с Workaround’ами должны храниться в отдельном файле. Для упрощения примера, я объявил их рядом с тест-кейсом.
 
const string BOOGLE_01 = "BOOGLE-01";
// BugId, "Bug Description"
public static Dictionary<string, string> Workarounds = new Dictionary<string, string>()
{
{BOOGLE_01, "Google Instant search should not always display the search phrase in lower case"},
// {BOOGLE_02, "Google Crashes"}, // Fixed in version 1.00.333
};
 
public static bool UseWorkAround(string bugId)
{
bool useWorkAround = false;
if (Workarounds.ContainsKey(bugId))
{
Console.WriteLine("Workaround for {0} - {1} was used", bugId, Workarounds[bugId]);
useWorkAround = true;
}
return useWorkAround;
}
 
// =================== TESTS ==================================
[Test]
public void TestSearchGoogleForThisIsATestWorkaround01()
{
// Actual: "this is a test - Поиск в Google"
// * Arrange
IWebDriver selenium = new InternetExplorerDriver();
var googlePage = new GoogleSearchPage(selenium);
string googleSearchPhrase = "This is a test";
 
if ( UseWorkAround(BOOGLE_01) )
googleSearchPhrase = googleSearchPhrase.ToLower();
 
// * Act
googlePage.Search(googleSearchPhrase);
 
// * Assert
// 1. Should contain the search phrase
StringAssert.Contains(googleSearchPhrase, selenium.Title);
 
// 2. Should contain our Company name
StringAssert.Contains("Google", selenium.Title);
}
Test.04.cs
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 54
// Пример 04: Универсальный метод WorkaroundFor для подавления возможных исключений в результате проверок
/* Примечание: Вторым параметром, метод WorkaroundFor(string bugId, Action testCode) принимает универсальный (любой) тестовый код. В языке C# это возможно благодаря поддержке замыканий и лямбда-выражениям. Предшественниками лямбда-выражений в языке C# были делегаты, также известные, как анонимные функции.
 
Смотрите также:
 
* Лямбда-выражения (Руководство по программированию в C#) < http://msdn.microsoft.com/ru-ru/library/bb397687.aspx >
* Анонимные функции (Руководство по программированию на C#) < http://msdn.microsoft.com/ru-ru/library/bb882516.aspx >
* Замыкания в языке C# < http://www.rsdn.ru/article/csharp/Closure_in_Csharp.xml >
* Википедия: Замыкание (программирование) < http://ru.wikipedia.org/wiki/Замыкание_(программирование) >
 
*/
 
public void WorkaroundFor(string bugId, Action testCode)
{
if (UseWorkAround(bugId))
{
try
{
testCode();
}
catch (Exception exception) // Suppress exception
{
Console.WriteLine("Workaround error:");
Console.WriteLine(exception.ToString());
}
}
else
{
testCode();
}
}
 
// =================== TESTS ==================================
[Test]
public void TestSearchGoogleForThisIsATestWorkaround04()
{
// Actual: "this is a test - Поиск в Google"
// * Arrange
IWebDriver selenium = new InternetExplorerDriver();
var googlePage = new GoogleSearchPage(selenium);
string googleSearchPhrase = "This is a test";
 
// * Act
googlePage.Search(googleSearchPhrase);
 
// * Assert
// 1. Should contain the search phrase
WorkaroundFor(BOOGLE_01,
() => StringAssert.Contains(googleSearchPhrase, selenium.Title)
);
 
// 2. Should contain our Company name
StringAssert.Contains("Google", selenium.Title);
}
Test.05.cs
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 54 55 56 57
/*
Пример 05: Более сложный пример с дескрипторами
Примечание: Во множестве случаев, простого списка обходов, в котором содержится идентификатор бага и его текстовое описание (заголовок), вполне хватает для успешной работы.
*/
 
const string BOOGLE_01 = "BOOGLE-01";
// BugId, "Bug Description"
public static Dictionary<string, string> Workarounds = new Dictionary<string, string>()
{
{BOOGLE_01, "Google Instant search should not always display the search phrase in lower case"},
// {BOOGLE_02, "Google Crashes"}, // Fixed in version 1.00.333
};
 
/*
Но, возможны и такие ситуации, когда автоматизация запускается на разных операционных системах и локализациях. И иногда появляются баги, которые воспроизводятся на Windows XP, но не воспроизводятся в Windows 7; воспроизводятся на китайском языке, но не воспроизводятся на русском.
В таких ситуациях, следует указать более детальную информацию о баге, и для этого список Workarounds усложняется дескриптором:
*/
 
 
class BugDescriptorExample
{
public class BugDescriptor
{
public bool IsFixed { get; set; }
public string Title { get; set; }
public string[] OS { get; set; }
public string[] Lang { get; set; }
public string[] Browser { get; set; }
}
 
const string BOOGLE_02 = "BOOGLE-02";
const string BOOGLE_01 = "BOOGLE-01";
 
// BugId, "Bug Description"
public static Dictionary<string, BugDescriptor> Workarounds = new Dictionary<string, BugDescriptor>()
{
{BOOGLE_01, new BugDescriptor()
{
IsFixed = false,
Title = "Google Instant search should not always display the search phrase in lower case",
OS = new string[] {"XP", "Vista"},
Lang = new string[] {":all"},
Browser = new string[] {":all"},
}},
 
{BOOGLE_02, new BugDescriptor()
{
IsFixed = true,
Title = "Google Crashes",
OS = new string[] {"XP", "Vista"},
Lang = new string[] {":all"},
Browser = new string[] {":all"},
}},
};
 
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.