Перехват событий google analytics и yandex metrika

Parent Previous Next

Перехват событий google analytics и yandex metrika


Чтобы перехватить события GA и YM воспользуетесь специальными методами.


await tester.AssertNetworkEventsAsync(true, new string[] { 
    "ec=ga_category", "ea=ga_action", "el=ga_label", "yandex_event" 
});

await Helper.ClearBrowserNetworkLogs(tester); // очистка событий



Еще один способ перехватить событие YM это использовать ?_ym_debug=1 в адресе и обработка событий браузера.



Файл: ExampleTest7.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 ExampleTest5

    {

        Tester tester; // Главная переменная для работы автотеста

        List<string> events; // Переменная в которую собираются все события браузера 


        // Главная входная функция (с этой функции начинается работа автотеста)

        public async void Main(Form browserWindow)

        {

            tester = new Tester(browserWindow); // Инициализация главной переменной


            await setUp(); // Функция начала работы с автотестом

            await test(); // Функция выполнения действий теста

            await tearDown(); // Функция завершения работы с автотестом

        }


        // Функция которая слушает события браузера

        private void browserConsoleEvents(object sender, Microsoft.Web.WebView2.Core.CoreWebView2DevToolsProtocolEventReceivedEventArgs e)
        {
            events.Add(e.ParameterObjectAsJson);
            tester.ConsoleMsg(e.ParameterObjectAsJson);
        }


        public async Task setUp()

        {

            await tester.BrowserFullScreenAsync(); // Устанавливает разрешение браузер на весь экран


            /*

             * Включим прослушивание событий браузера
             * Источник: https://chromedevtools.github.io/devtools-protocol/tot/Network/
             */ 

            tester.BrowserView.CoreWebView2.GetDevToolsProtocolEventReceiver("Log.entryAdded").DevToolsProtocolEventReceived += browserConsoleEvents;
            await tester.BrowserView.CoreWebView2.CallDevToolsProtocolMethodAsync("Log.enable", "{}");
            tester.BrowserView.CoreWebView2.GetDevToolsProtocolEventReceiver("Console.messageAdded").DevToolsProtocolEventReceived += browserConsoleEvents;
            await tester.BrowserView.CoreWebView2.CallDevToolsProtocolMethodAsync("Console.enable", "{}");
            tester.BrowserView.CoreWebView2.GetDevToolsProtocolEventReceiver("Runtime.consoleAPICalled").DevToolsProtocolEventReceived += browserConsoleEvents;
            tester.BrowserView.CoreWebView2.GetDevToolsProtocolEventReceiver("Runtime.exceptionThrown").DevToolsProtocolEventReceived += browserConsoleEvents;
            await tester.BrowserView.CoreWebView2.CallDevToolsProtocolMethodAsync("Runtime.enable", "{}");
tester.BrowserView.CoreWebView2.GetDevToolsProtocolEventReceiver("Network.dataReceived").DevToolsProtocolEventReceived += browserConsoleEvents;
            await tester.BrowserView.CoreWebView2.CallDevToolsProtocolMethodAsync("Network.enable", "{}");
            tester.BrowserView.CoreWebView2.GetDevToolsProtocolEventReceiver("Debugger.scriptParsed").DevToolsProtocolEventReceived += browserConsoleEvents;
            await tester.BrowserView.CoreWebView2.CallDevToolsProtocolMethodAsync("Debugger.enable", "{}");

        }


        public async Task test()

        {

            await tester.TestBeginAsync(); // Начало выполнения действий

            await tester.GoToUrlAsync("https://test.site.com/?_ym_debug=1", 5); // Загрузка страницы с включенной отладкой YM событий


            await tester.SetValueInElementAsync(Tester.BY_XPATH, "//input[@id='SECOND_NAME']", Helper.TestName);
            await tester.WaitAsync(1);
            await tester.SetValueInElementAsync(Tester.BY_XPATH, "//input[@id='NAME']", Helper.TestName);
            await tester.WaitAsync(1);
            await tester.SetValueInElementAsync(Tester.BY_XPATH, "//input[@id='PHONE']", Helper.TestPhone);
            await tester.WaitAsync(1);
            await tester.ClickElementAsync(Tester.BY_XPATH, "//input[@id='fb_close']");
            await tester.WaitAsync(1);
            await tester.WaitVisibleElementAsync(Tester.BY_XPATH, "//p[text() = 'Спасибо! Ваша заявка принята.']", 25);
            await tester.WaitAsync(5);


            // Проверка события YM в списке событий браузера
            tester.SendMessage("Message", Tester.COMPLETED, "Проверка: Событие YM (Goal id: yandex_event)", Tester.IMAGE_STATUS_MESSAGE);
            bool checkYM = false;
            foreach(string value in events)
            {
                checkYM = value.Contains("Goal id: yandex_event");
                if (checkYM == true)
                {
                    tester.SendMessage("Message", Tester.COMPLETED, "Сработало событие YM: " + value, Tester.IMAGE_STATUS_MESSAGE);
                    break;
                }
            }
            await tester.AssertTrueAsync(checkYM); // Результат проверки


            await tester.TestEndAsync(); // Завершение выполнения действий

        }


        public async Task tearDown()

        {

            await tester.BrowserCloseAsync(); // Закрывает браузер

        }



    }

}


Таким образом автотест слушает все события браузера и после выполнения действий просматривает все события в поисках YM.

Если событие YM будет найдено тест считается успешным.


Created with the Personal Edition of HelpNDoc: Easily create Help documents