4.1. Функциональное тестирование Web-приложений

Назад: 4 Работа с Web-приложениями Содержание Дальше: 4.2 Нагрузочное тестирование Web-приложений

Выбор модели объектов

Прежде чем начать разработку скриптов для функционального тестирования веб-приложений, необходимо выбрать модель объектов веб-приложений. В главе 3.1 Выбор модели объектов мы рассмотрели 2 модели приложений: Flat и Tree. В случае тестирования веб-приложений эти опции также важны, однако кроме них необходимо установить и специальную модель для веб-приложений.

Для этого надо щелкнуть правой кнопкой мыши по имени проекта и выбрать пункт меню Edit – Properties, затем open Applications – Web Testing. В правой панели TestComplete вы увидите выпадающий список Tree Model:
  

У нас есть выбор из 4х моделей: DOM, Tag, Tree и Hybrid. Мы рассмотрим примеры выбора разных моделей на примере браузера Firefox и сайта http://rsdn.ru/ .

DOM-модель.  При выборе DOM-модели объект Page содержит свойства document и frames, а элементы веб-страницы доступны через свойство document.all.
  
Каждый элемент имеет имя вида Item(Index), где Index – это id, имя или порядковый номер элемента управления.
В некоторых случаях (например, в случае использования элементов управления типа radio buttons) каждый элемент такого элемента управления отображается отдельно, что может существенно замедлить выполнение скриптов. В таких случаях рекомендуется использовать другие модели объектов (Tag или Tree).

Tag-модель. В случае использования Tag модели все элементы управления тестируемого приложения сгруппированы по тегам (например, все изображения будут находиться в группе IMG, все ссылки – в группе A и т.д.).
  

Имена элементов также имеют вид Item(Index), где Index может быть Id, имя объекта или, если ни одно из этих свойств не указано, имя группы плюс порядковый номер, разделенные подчеркиванием (например, A_2, IMG_23).

Если у вас возникает необходимость работать с многими элементами одного типа (например, перебирать все ссылки или картинки на странице), модель Tag будет наиболее быстрой и удобной в работе.

Tree-модель. При использовании модели Tree объекты в Object Browser-е отображаются в такой же иерархии, как они находятся на странице приложения. Для доступа к элементам управления используются имена типов объектов, а не их теги.
  
В случае использования Tree-модели некоторые элементы могут не отображаться в Object Browser-е, если в них отсутствует текст (например, элемент SPAN). Модель Tree рекомендуется использовать в том случае, если на страничках тестируемого приложения находится много элементов управления или если доступ к одним и тем же элементам производится много раз.

Hybrid-модель. Эта модель является комбинацией моделей Tree и DOM. В случае ее использования объекты в Object Browser-е отображаются таким образом:
  
Эта модель введена для совместимости с более ранними версиями TestComplete, если вы хотите использовать модель Tree. В этом случае вы сможете как записывать новые скрипты (будет использована модель Tree), так и запускать старые (будет использована модель DOM). Естественно, вы можете использовать преимущества DOM-модели и при создании новых скриптов.

Теперь мы напишем один и тот же скрипт с использованием разных моделей. Скрипт будет открывать в браузере Firefox страницу http://ya.ru/ и осуществлять поиск текста “Учебник TestComplete”.
// Использование DOM модели
function TestDOM()
{
  var  firefox;
  var  page;
  firefox = Sys.Process(“firefox”);
  page = firefox.Page(“*”);
  page.ToUrl(“http://ya.ru”);
  page.Wait();
  page = firefox.Page(“http://ya.ru/”);
  page.document.all.Item(“text_2″).Keys(“учебник TestComplete”);
  page.document.all.Item(45).Click();
  page.Wait();
}

// Использование TAG модели
function TestTAG()
{
  var  firefox;
  var  page;
  firefox = Sys.Process(“firefox”);
  page = firefox.Page(“*”);
  page.ToUrl(“http://ya.ru”);
  page.Wait();
 
  page.INPUT.Item(“text”).Keys(“учебник TestComplete”);
  page.INPUT.Item(“INPUT”).Click();
  page.Wait();
}
// Использование TREE модели
function TestTREE()
{
  var  firefox;
  var  page;
  firefox = Sys.Process(“firefox”);
  page = firefox.Page(“*”);
  page.ToUrl(“http://ya.ru”);
  page.Wait();
 
  page.Table(0).Cell(1, 0).Form(0).Table(0).Cell(0, 1).Panel(0).Textbox(“text”).Keys(“учебник TestComplete”);
  page.Table(0).Cell(1, 0).Form(0).Table(0).Cell(0, 2).SubmitButton(“Найти”).Click();
  page.Wait();
}

// Использование HYBRID модели
function TestHYBRID()
{
  var  firefox;
  var  page;
  firefox = Sys.Process(“firefox”);
  page = firefox.Page(“*”);
  page.ToUrl(“http://ya.ru”);
  page.Wait();
 
  page.document.all.Item(“text_2″).Keys(“учебник TestComplete”);
  page.Table(0).Cell(1, 0).Form(0).Table(0).Cell(0, 2).SubmitButton(“Найти”).Click();
  page.Wait();
}

Как видно из этого примера, в последнем случае использования Hybrid модели для доступа к текстовому полю и кнопке “Найти” мы воспользовались разными способами доступа (DOM и Tree).

Интересной особенностью использования разных моделей является то, что их можно менять в процессе выполнения скрипта. Для этого используется объект Options. Например, следующая функция запустит все 4 написанных ранее функции по очереди, для каждой устанавливая необходимую модель объектов.
 

function TestDifferentModels()
{
  Options.Web.TreeModel = “DOM”;
  TestDOM();
  Options.Web.TreeModel = “Tag”;
  TestTAG();
  Options.Web.TreeModel = “Tree”;
  TestTREE();
  Options.Web.TreeModel = “Hybrid”;
  TestHYBRID();
}

В дальнейшем в примерах мы будем использовать Tag модель совместно с Flat моделью проекта.

Если вы попытаетесь записать скрипт с помощью встроенных в TestComplete средств записи, вы увидите, что сгенерированный скрипт выглядит не так красиво и понятно, как приведенные выше примеры. Например:
 

function TestRecording()
{
  var  firefox;
  var  wndMozillaUIWindowClass;
  var  page;
  firefox = Sys.Process(“firefox”);
  wndMozillaUIWindowClass = firefox.Window(“MozillaUIWindowClass”, “Mozilla Firefox”);
  wndMozillaUIWindowClass.Window(“MozillaWindowClass”, “”, 1).Keys(“~![ReleaseLast][ReleaseLast]ya.[Down][Enter]”);
  //Please wait until download completes: “http://ya.ru/”
  page = firefox.Page(“http://ya.ru/”);
  page.Wait();
  wndMozillaUIWindowClass.Window(“MozillaWindowClass”, “”, 4).Keys(“~![ReleaseLast][ReleaseLast]учебник ~![ReleaseLast][ReleaseLast]TestComplete”);
  page.Table(0).Cell(1, 0).Form(0).Table(0).Cell(0, 2).SubmitButton(“Найти”).Click();
  //Please wait until download completes: “http://yandex.ua/yandsearch?rdrnd=702097&text=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20TestComplete&lr=141″
  page.Wait();
  //Please wait until download completes: “http://yandex.ua/yandsearch?rdrnd=702097&text=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20TestComplete&lr=141″
  page.Wait();
  //Please wait until download completes: “http://yandex.ua/yandsearch?rdrnd=702097&text=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20TestComplete&lr=141″
  page.Wait();
  //Please wait until download completes: “http://yandex.ua/yandsearch?rdrnd=702097&text=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20TestComplete&lr=141″
  page.Wait();
  //Please wait until download completes: “http://yandex.ua/yandsearch?rdrnd=702097&text=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20TestComplete&lr=141″
  page.Wait();
  //Please wait until download completes: “http://yandex.ua/yandsearch?rdrnd=702097&text=%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%20TestComplete&lr=141″
  page.Wait();
}

Это происходит потому, что TestComplete при записи действий записывает ВСЕ действия. В данном случае он записал ввод текста вместе с комбинацией клавиш переключения раскладки клавиатуры (Alt+Shift), причем метод Keys записался для всего окна, а не для текстового поля.

Записанный скрипт является нечитабельным даже в таком простом примере, так что можете представить себе, насколько запутанным он будет в случае записи более сложного примера. Именно поэтому мы не рекомендуем пользоваться средствами записи действий особенно при тестировании веб-приложений. Если вы не знаете, как обратиться к тому или иному элементу управления, проще посмотреть путь к нему в окне Object Properties и скопировать полное имя оттуда, чем пользоваться средствами записи.

 

Тестирование в разных браузерах

TestComplete поддерживает несколько браузеров для тестирования веб-приложений:

  • Internet Explorer (версии 5 – 8)
  • Mozilla Firefox (версии 1.5.0.1 – 3.x)
  • Netscape Navigator (8.1.2, ограниченная поддержка)

Кроме того, поддерживается любой браузер, созданный с использованием элемента управления MS Web Browser (например, Avant Browser, MyIE).

Однако каждый браузер может добавлять свои собственные свойства и методы для работы с элементами веб-страниц, которые не будут работать в других браузерах.

Если открыть в Object Browser-е любую страничку в двух разных браузерах (например, FF и IE), то вы увидите, что свойства находятся в разных секциях. Есть секция Standard, в которой находятся свойства, доступные во всех браузерах без исключения. Некоторые свойства (например, innerText) доступны во всех браузерах, так как они являются стандартными свойствами веб-элементов, однако они будут находиться в секции Firefox (или Internet Explorer). Например, свойство value для текстового поля всегда содержит текст поля.

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

 

Основы разработки скриптов при тестировании веб-приложений

Теперь рассмотрим более подробно процесс создания скриптов при тестировании веб-приложений.

Как вы уже поняли из предыдущих примеров, доступ к элементам веб-страниц производится через объект Page, который является дочерним объектом процесса браузера, например:
 

Sys.Process(“firefox”).Page(“about:blank”)
Sys.Process(“IEXPLORE”).Page(“http://ya.ru/”)

Для того чтобы открыть какой-то адрес внутри страницы, необходимо использовать метод ToUrl. Этот метод открывает указанный адрес, дожидается окончания загрузки страницы и возвращает новую копию объекта Page. Например,
 

var page = Sys.Process(“firefox”).Page(“about:blank”);
page =page.ToUrl(“http://ya.ru/”);

Если вам необходимо только открыть страничку и не дожидаться окончания ее завершения, можно воспользоваться методом NavigateTo:
page. NavigateTo (“http://ya.ru/”);

Для того, чтобы узнать текущий адрес какой-то странички, необходимо получить значение его свойства URL:
var sCurrentURL = page.URL;

Если на страничке были сделаны какие-то изменения, которые требуют обновления данных на странице, можно воспользоваться методом Wait.
page.Wait();

Кроме перечисленных свойств и методов, можно также использовать методы WaitItem и методы Find (подробнее об этих методах можно прочитать в главе 3.5 Синхронизация выполнения скриптов).

Так как принципы работы с этими методами такие же, как и для любых других приложений, мы здесь не будем подробно останавливаться на них.

 

Создание чекпоинтов

При записи или написании скриптов, работающих с веб-страницами, можно создавать 2 типа специфических чекпоинтов.

  1. Web Accessibility checkpoint. Этот чекпоинт позволяет выполнить проверку параметров всех элементов страницы (таких как alt image, tab order, links accessibility, images sizes и т.п.). Т.е. будут выполнены проверки на то, что ссылки доступны, картинки имеют заданные атрибуты height и width и т.п.
  2. Web Comparison Checkpoint. Этот чекпоинт позволяет сравнивать две HTML-странички либо целиком, либо только структуру тегов (всех или выбранных).

Создание этих чекпоинтов похоже на создание любых других чекпоинтов (например, Image Checkpoint или Property Checkpoint). Естественно, кроме этих специфических чекпоинтов можно создавать и более общие (например, те же Property Checkpoint-ы).

Для запуска верификации Web чекпоинтов необходимо вызвать метод
WebTesting.WebAccessibility1.Compare();
или
WebTesting.WebComparison1.Compare();   
где WebAccessibility1 и WebComparison1 – соответственно имена созданных чекпоинтов.

Назад: 4 Работа с Web-приложениями Содержание Дальше: 4.2 Нагрузочное тестирование Web-приложений