testcafe запускает различные тесты на основе браузера
Мне было интересно, есть ли способ как-то передать параметр, чтобы дать вашему устройству или даже всем тестам знать, в каком браузере они работают.
В моем конкретном случае я бы использовал этот параметр, чтобы просто присвоить соответствующее значение переменной внутри моих тестов.
Например,
switch(browser) {
case 'chrome':
chrome = 'chrome.com';
break;
case 'firefox':
link = 'firefox.com';
break;
case 'safari':
link = 'safari.com';
break;
default:
break;
}
В настоящее время я смог добиться чего-то подобного, добавив глобальную переменную узла, и это выглядит примерно так:
"chrome": "BROWSER=1 node runner.js"
Тем не менее, это заставляет меня создавать отдельный бегун для каждого браузера (сафари-бегун, хром-бегун и т. Д.), И я хотел бы, чтобы все было в одном месте.
Итак, в конце дня мне нужно будет сделать эту работу:
const createTestCafe = require('testcafe');
let testcafe = null;
createTestCafe('localhost', 1337, 1338)
.then(tc => {
testcafe = tc;
const runner = testcafe.createRunner();
return runner
.src('test.js')
.browsers(['all browsers'])
.run({
passBrowserId: true // I guess it would look something like this
});
})
.then(failedCount => {
console.log('Tests failed: ' + failedCount);
testcafe.close();
})
.catch(error => {
console.log(error);
testcafe.close();
});
2 ответа
Есть несколько способов получить информацию о браузере:
Получите navigator.userAgent из браузера, используя ClientFunction. При желании вы можете использовать модуль для разбора строки пользовательского агента, например: ua-parser-js.
import { ClientFunction } from 'testcafe'; import uaParser from 'ua-parser-js'; fixture `get ua` .page `https://testcafe.devexpress.com/`; const getUA = ClientFunction(() => navigator.userAgent); test('get ua', async t => { const ua = await getUA(); console.log(uaParser(ua).browser.name); });
Используйте RequestLogger для получения информации о браузере. Например:
import { RequestLogger } from 'testcafe'; const logger = RequestLogger('https://testcafe.devexpress.com/'); fixture `test` .page('https://testcafe.devexpress.com') .requestHooks(logger); test('test 1', async t => { await t.expect(logger.contains(record => record.response.statusCode === 200)).ok(); const logRecord = logger.requests[0]; console.log(logRecord.userAgent); });
Команда TestCafe работает над функцией t.browserInfo, которая решает проблему в будущем.
Просто чтобы обновить этот вопрос, testcafe теперь реализовал t.browser, что позволит вам проверить
browser.name
или же
browser.alias
чтобы определить, в каком браузере вы работаете.
import { t } from 'testcafe';
const browserIncludes = b => t.browser.name.includes(b);
const isBrowserStack = () => t.browser.alias.includes('browserstack');
fixture `test`
.page('https://testcafe.devexpress.com')
test('is Chrome?', async () => {
console.log(t.browser.name);
await t.expect(browserIncludes('Chrome').ok();
await t.expect(isBrowserStack()).notOk();
});