Обработка XML данных для проверки карты сайта Sitemap
Для работы с XML используются следующие библиотеки
using System.Collections;
using System.Xml;
Опишем вспомогательный метод ReadSitemapXML для чтения данных из карты сайта sitemap.xml
Этот метод можно описать в Steps классе но для того чтобы он был доступен в любом классе лучше описать его в Helper.
Задача методы ReadSitemapXML заключается в чтении ссылок из файла sitemap.xml и в результате возврат списка прочитанных ссылок.
Файл: Helper.cs |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using System.Threading; using System.Threading.Tasks; using System.IO; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; using Newtonsoft.Json; using HatFramework; using System.Collections; using System.Xml; namespace Hat { public static class Helper { /* Метод: чтение XML файла карты сайта */ public static async Task<List<string>> ReadSitemapXML(Tester tester, string filename, bool useragent) { // Выводим сообщение int step = tester.SendMessage("ReadSitemapXML(\"" + filename + "\")", Tester.PROCESS, "Чтение xml файла карты сайта", Tester.IMAGE_STATUS_PROCESS); // Объявляем переменную тип которой список (список для хранения ссылок) List<string> list = new List<string>(); // Объявляем переменную которая является флагом ошибки (по умолчанию флаг отключен) bool errors = false; try { // Настраиваем системные параметры подключения ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; // Выполняем чтение xml файла XmlDocument xDoc; if (useragent == false) { xDoc = new XmlDocument(); xDoc.Load(filename); } else { WebClient client = new WebClient(); client.Headers["User-Agent"] = await tester.BrowserGetUserAgentAsync(); client.Headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; string data = client.DownloadString(filename); xDoc = new XmlDocument(); xDoc.LoadXml(data); } // Читаем элементы из полученного xml файла XmlElement xRoot = xDoc.DocumentElement; foreach (XmlNode xnode in xRoot) { for (int j = 0; j <= xnode.ChildNodes.Count; j++) { if (xnode.ChildNodes[j].Name == "loc") { // Сохраняем полученную ссылку в список list.Add(xnode.ChildNodes[j].InnerText); break; } } } // Меняем статус сообщения на успешное выполнение tester.EditMessage(step, null, Tester.PASSED, "Прочитан xml файл карты сайта", Tester.IMAGE_STATUS_PASSED); } catch (Exception ex) { // Меняем статус сообщения на неудачное выполнение tester.EditMessage(step, null, Tester.FAILED, "Не удалось прочитать xml файл карты сайта. Ошибка: " + ex.Message, Tester.IMAGE_STATUS_FAILED); errors = true; // включаем флаг ошибки } // Проверка флага ошибки (если влаг включен true значит произошла неудача и тест будет прерван await tester.AssertFalseAsync(errors); return list; // возвращаем список ссылок } } } |
Теперь опишем автотест в котором выполним проверку карты сайта
Файл: Sitemap_Test.cs |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using System.Threading; using System.Threading.Tasks; using System.IO; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; using Newtonsoft.Json; using HatFramework; namespace Hat { public class Sitemap_Test { // Главная переменная для работы автотеста Tester tester;
// Главная входная функция (с этой функции начинается работа автотеста) public async void Main(Form browserWindow) { // Инициализация главной переменной и дополнительных функций tester = new Tester(browserWindow); await setUp(); await test(); await tearDown(); } // Функция начала работы с автотестом public async Task setUp() { await tester.BrowserFullScreenAsync(); // Устанавливает разрешение браузер на весь экран } // Функция выполнения действий автотеста public async Task test() { await tester.TestBeginAsync(); // Начало выполнения действий // Вывод сообщения tester.SendMessage("Message", Tester.COMPLETED, "Открываем страницу карты сайта", Tester.IMAGE_STATUS_MESSAGE); // Загрузка страницы по указанному адресу await tester.GoToUrlAsync("https://somovstudio.github.io/sitemap.xml", 25); // Чтение ссылок из файла sitemap.xml List<string> list = await Helper.ReadSitemapXML(tester, "https://somovstudio.github.io/sitemap.xml", false); // Обработка списка ссылок int status = 0; foreach (string url in list) { // Получение статуса страницы (200 - корректно, 404 - нет страницы, 502 - сервер не отвечает и т.п.) status = await tester.RestGetStatusCodeAsync(url); // Вывод результата в консоль tester.ConsoleMsg("Статус: " + status.ToString() + " | Страница: " + url); // Проверка корректности результата await tester.AssertEqualsAsync(200, status); } await tester.TestEndAsync(); // Завершения выполнения действий } // Функция завершения работы с автотестом public async Task tearDown() { await tester.BrowserCloseAsync(); // Закрывает браузер } } } |
Created with the Personal Edition of HelpNDoc: Full-featured Documentation generator