Работа с нестроковым объектом, зарегистрированным в консоли браузера в testcafe

#javascript #testing #automation #automated-tests #testcafe

#javascript #тестирование #автоматизация #автоматизированные тесты #testcafe

Вопрос:

Мне была предоставлена страница, которая регистрирует некоторый объект на консоли. Я хочу получить доступ к этому объекту с помощью getBrowserConsoleMessages(), но, к сожалению, он отображается там как строка «[object Object]», и у меня нет возможности проанализировать его и получить доступ к его свойствам. Или, по крайней мере, для меня это не очевидно. Чего мне не хватает?

 <!DOCTYPE html>
<html>
<body>
    <script>console.log({message: 'Hello, world!'});</script>
</body>
</html>
 
 fixture.page("http://127.0.0.1:5500/test.html")("Check page");

test("Console accessible", async t => {
    const { log } = await t.getBrowserConsoleMessages()
    console.log(JSON.parse(log[0]).message)
})
 

Ответ №1:

Данные, зарегистрированные с помощью ‘console.функция log’ получается со стороны клиента в виде строки, где отсутствует сериализация object сообщений типа console. У TestCafe есть проблема, связанная с этим: улучшить сериализацию сообщения консоли браузера с типом ‘Object’.

Тем временем вы можете использовать следующие обходные пути:

  1. Выполните сериализацию object переменных на стороне клиента, используя JSON.stringify метод. После этого проанализируйте их, используя JSON.parse метод в тесте.
  2. Внедрите клиентские скрипты на свою страницу и имитируйте клиентскую console.log функцию для выполнения stringify переданного ей аргумента. Например, создайте клиентский скрипт с именем ‘overrideLogs.js » с помощью кода:
 var originalConsoleLog = console.log;
console.log = data => originalConsoleLog(JSON.stringify(data));
 

Запускайте тесты с помощью TestCafe с указанным клиентским скриптом:

 testcafe chrome test.js --client-scripts overrideLogs.js
 

В конце концов, вывод будет содержать сообщение от объекта, зарегистрированного на странице.