Javascript TestCafe:页面对象模型-使用一个公共引用访问所有实例化对象

Javascript TestCafe:页面对象模型-使用一个公共引用访问所有实例化对象,javascript,testing,automated-tests,e2e-testing,testcafe,Javascript,Testing,Automated Tests,E2e Testing,Testcafe,页面模型- import { Selector } from 'testcafe'; export default class Page { constructor () { this.nameInput = Selector('#developer-name'); } } 页面模型2- import { Selector } from 'testcafe'; export default class Page2 { constructor () {

页面模型-

import { Selector } from 'testcafe';

export default class Page {
    constructor () {
        this.nameInput = Selector('#developer-name');
    }
}
页面模型2-

import { Selector } from 'testcafe';

export default class Page2 {
    constructor () {
        this.nameInput2 = Selector('#tester-name');
    }
}
用于实例化上述内容的通用规范-

import Page from './page-model';
import Page2 from './page-model2';

const page = new Page();
const page2 = new Page2();

我们是否可以使用单个文件\spec实例化上述两个页面,然后从单个引用变量跨页面访问所有选择器?

如果您不想在每个测试中创建新的实例,可以直接在model.js中导出它们:

test.js

import { pageOne, pageTwo } from './model';

fixture `fixture 1`
    .page `http://example.com`;

test(`test`, async t => {
    await t
    .click(pageOne.el1)
    
    //...navigation to page two
    
    .click(pageTwo.el2);
});
import selectors from './selectors';

fixture `fixture 1`
    .page `http://example.com`;

test(`test`, async t => {
    await t
    .click(selectors.el1)
    .click(selectors.el2);
});
model.js

import { Selector } from 'testcafe';

class PageOne {
    constructor () {
        this.el1 = Selector('#el1');
        //....
    }
}

class PageTwo {
    constructor () {
        this.el2 = Selector('#el2');
        //....
    }
}

export const pageOne = new PageOne();
export const pageTwo = new PageTwo();
更新

此外,您还可以在单独的模块中组织所有选择器,如下所示:

test.js

import { pageOne, pageTwo } from './model';

fixture `fixture 1`
    .page `http://example.com`;

test(`test`, async t => {
    await t
    .click(pageOne.el1)
    
    //...navigation to page two
    
    .click(pageTwo.el2);
});
import selectors from './selectors';

fixture `fixture 1`
    .page `http://example.com`;

test(`test`, async t => {
    await t
    .click(selectors.el1)
    .click(selectors.el2);
});
选择器.js

import { Selector } from 'testcafe';

export default {
    el1: Selector('#el1'),
    el2: Selector('#el2'),
    //....
}

谢谢你的回复。但是我希望有一个通用的参考规范,在这个规范中,我只需要导入一个函数并跨多个文件\页面访问选择器。下面是这样的内容-我不确定TestCafe是否允许我们实现这一点?”从“./model”导入{commonSelectorSpec};夹具
夹具1
。页面
http://example.com
;test(
test
,async t=>{wait t t.单击(commonSelectorSpec.el1)/…导航到第二页。单击(commonSelectorSpec.el2);});'谢谢你的澄清。请参阅上面更新的答案。感谢您的回复。除此之外,您能否建议如何在包含选择器的另一个单独页面上执行此操作?