В данной статье мы рассмотрим каким образом можно встроенными средствами МS XML в TestComplete создать XML-файл. Зачем это нужно? Например, некоторая программа умеет загружать список продуктов в XML формате. Необходимо проверить правильность загрузки данного списка в этой программе. Допустим список у нас хранится в ODT. Как это сделать я уже писал в своей статье Основы работы с ODT в TestComplete, поэтому я не буду на этом останавливаться.
Структура класса Item в ODT:
- Name (Название продукта);
- Number (Количество);
- Volume (Объем);
- Type (Тип).
Элемент типа Array со значениями в ODT:
- item0: Name: Молоко; Number: 1; Volume: 0.5;
- item1: Name: Хлеб; Number: 1;
- item2: Name: Мясо; Volume: 1; Type: Говядина;
- item3: Name: Рис; Volume: 1;
- item4: Name: Греча; Volume: 1;
- item5: Name: Яблоки; Volume: 1.
Для создания XML-файла необходимо прописать следующие строки:
Obj := Sys.OleObject('Msxml2.DOMDocument'); // Инициализируем DOM-объектObj.async := false; // Отключаем асинхронный режимObj.Save('D:/filename.xml'); // Сохраняем файл
Мы научились создавать XML-файл. Это просто. Теперь добавим в него наши данные.
Для начала нужно добавить инструкции XML, которая содержит информацию о версии XML и кодировке данного XML-файла:
Instruction := Obj.CreateProcessingInstruction('xml', 'version="1.0" encoding="utf-8"');Obj.AppendChild(Instruction);
Метод AppendChild предназначен для добавления узла. В дальнейшем мы будем активно использовать данный метод.
Теперь добавим корневой элемент list, для этого воспользуемся методом CreateElement, который создает элемент.
List := Оbj.CreateElement('list');Obj.AppendChild(List);
Следующим шагом добавим список продуктов из ODT:
for i := 0 to Self.Count - 1 do beginNode := Оbj.CreateElement(Self.Items(i).Value.Name);List.AppendChild(Node);end;
А также добавим параметры для каждого элемента списка, для этого будем использовать метод SetAttribute:
if Length(Self.Items(i).Value.Number) > 0 thenNode.SetAttribute(Self.Items(i).Value.Number);if Length(Self.Items(i).Value.Volume) > 0 thenNode.SetAttribute(Self.Items(i).Value.Volume);if Length(Self.Items(i).Value.Type) > 0 thenNode.SetAttribute(Self.Items(i).Value.Type);
В завершении объединим все куски кода:
Obj := Sys.OleObject('Msxml2.DOMDocument');Obj.async := false;Instruction := Obj.CreateProcessingInstruction('xml', 'version="1.0" encoding="utf-8"');Obj.AppendChild(Instruction);List := Оbj.CreateElement('list');Obj.AppendChild(List);for i := 0 to Self.Count - 1 do beginNode := Оbj.CreateElement(Self.Items(i).Value.Name);if Length(Self.Items(i).Value.Number) > 0 thenNode.SetAttribute(Self.Items(i).Value.Number);if Length(Self.Items(i).Value.Volume) > 0 thenNode.SetAttribute(Self.Items(i).Value.Volume);if Length(Self.Items(i).Value.Type) > 0 thenNode.SetAttribute(Self.Items(i).Value.Type);List.AppendChild(Node);end;Obj.Save('D:/filename.xml');
В итоге должно получиться, что-то вроде этого:
- Молоко
- Хлеб
- Мясо
- Рис
- Греча
- Яблоки