#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’.
Тем временем вы можете использовать следующие обходные пути:
- Выполните сериализацию
object
переменных на стороне клиента, используяJSON.stringify
метод. После этого проанализируйте их, используяJSON.parse
метод в тесте. - Внедрите клиентские скрипты на свою страницу и имитируйте клиентскую
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
В конце концов, вывод будет содержать сообщение от объекта, зарегистрированного на странице.