#cross-browser #automated-tests #e2e-testing #web-testing #testcafe
#кросс-браузерный #автоматизированные тесты #e2e-тестирование #веб-тестирование #тестовое кафе #testcafe
Вопрос:
Я хочу использовать testcafe для запуска браузеров, доступных через внутренних и внешних поставщиков браузеров. Мне не нужны какие-либо функции тестирования. Но я хочу иметь возможность использовать takeScreenshot, resizeWindow и т.д.
Вот мой код.
const pool = require("./node_modules/testcafe/lib/browser/provider/pool.js");
pool.getProvider("chrome").then((provider) => {
const plugin = provider.plugin;
console.log("open")
plugin.openBrowser("foo", "http://google.de", "chrome").then(() => {
console.log("done");
}).catch(console.warn);;
console.log("early");
}).catch(console.warn);
Если я запускаю или отлаживаю файл с этим кодом, обещание открыть браузер никогда не будет выполнено. Консоль печатает open
и early
, а затем программа завершает работу.
Если я скопирую и вставлю код в интерактивную оболочку узла, браузер запустится. (Я получаю исключение, что соединение равно нулю, но этот код никогда не запускается, если я запускаю файл.
Что я делаю не так?
ОБНОВЛЕНИЕ: это код, который использует async / await, но также не работает:
const pool = require("../node_modules/testcafe/lib/browser/provider/pool.js");
(async () => {
const provider = await pool.getProvider("chrome");
const plugin = provider.plugin;
await plugin.openBrowser("foo", "http://google.de", "chrome");
console.log("done");
})();
Ответ №1:
Мы не рекомендуем использовать этот внутренний API, поскольку он может быть изменен в любое время без уведомления. Вместо этого вы можете использовать модуль testcafe-browser-tools.
Метод plugin.openBrowser является асинхронным. Итак, вам нужно дождаться результата выполнения метода. Пожалуйста, смотрите runBrowser
код TestCafe для получения более подробной информации.
Комментарии:
1. Могу ли я запустить любой браузер, доступный у сторонних поставщиков, через testcafe-browser-tools? Это требование.
2. Вы написали: «Метод plugin.openBrowser является асинхронным». Да. Вместо этого я просто использую обещание, возвращаемое функцией async. Я подумал, что это может быть проще понять, чем немедленно выполняемая асинхронная функция. (Я попробовал это первым)