testcafe запускает различные тесты на основе браузера - PullRequest
0 голосов
/ 19 сентября 2018

Мне было интересно, есть ли способ каким-либо образом передать параметр, позволяющий вашему устройству или даже всем тестам узнать, в каком браузере они работают.

В моем конкретном случае я бы использовал этот параметр, чтобы простоприсвойте соответствующее значение переменной внутри моих тестов.

Например,

    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();
    });

1 Ответ

0 голосов
/ 19 сентября 2018

Существует несколько способов получения информации о браузере:

  • Получите 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 , которая решает проблему в будущем.

...