javascript-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"

但是,这使我为每个浏览器(safari-runner,chrome-runner等)创建一个单独的运行器,我希望将所有内容都放在一个位置.

因此,总而言之,我需要完成这项工作:

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

解决方法:

有几种获取浏览器信息的方法:

>使用ClientFunction从浏览器获取navigator.userAgent.(可选)您可以使用模块来解析用户代理字符串,例如: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功能,该功能将来会解决.

上一篇:javascript-如何在一个屏幕而不是整个应用程序中处理退出应用程序-React Native?


下一篇:Javascript-在redux-persist中使用autoRehydrate有什么用,为什么在v5上将其删除?