Обработка XML данных для проверки карты сайта Sitemap

Parent Previous Next

Обработка 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