如何使用TestCafe访问应用程序操作?

时间:2019-05-16 08:53:16

标签: javascript automated-tests e2e-testing web-testing testcafe

我试图寻找答案,但是找不到。我想编写一个函数来删除以前使用的测试组织,然后再在testcafe中开始测试。

如果要通过UI进行操作,这将是一个非常耗时的操作。所以我想知道是否可以使用应用程序操作并编写一个函数删除我的测试数据?

我的想法是执行以下步骤: 1.找到我要删除的所有测试组织 2.遍历每个对象,调用ShowDeleteOrgModal()方法,然后再调用DeleteOrganisation()方法。

我看到其他测试工具可以使用window()访问应用程序操作。 有什么办法可以在testCafe中实现它?

按钮选择器看起来像这样。

<button class="button_class" onclick="OurApplicationName.ShowDeleteOrgModal('organisation_id');
return false;">Delete Organisation</button>

我们在柏树中实现了类似的想法:

CleanUpOrgs() {
         cy.window().then((win) => {
         let numberOfOrgs = win.window.$('tr:contains(' + Cypress.env('testOrgName') + ')').length;
            while (numberOfOrgs > 0) {
                cy.get('table').contains('tr', Cypress.env('testOrgName')).then(elem => {
                    let orgId = elem[0].id.replace('OurApplicationName_', '');
                    cy.window().then((win) => {
                        win.window.OurApplicationName.ShowDeleteOrgModal(orgId);
                        win.window.OurApplicationName.DeleteOrganisation();
                        cy.wait(2000);
                    });
                });
                numberOfOrgs--;
            }
        });
    },

如何使用TestCafe访问窗口?

1 个答案:

答案 0 :(得分:7)

尝试使用ClientFunction。例如,您可以使用以下代码打开模态:

import { ClientFunction } from 'testcafe';

const showDeleteOrgModal = ClientFunction(organizationId => {
    OurApplicationName.ShowDeleteOrgModal(organizationId);
});

fixture`My fixture`
    .page`http://www.example.com/`;

test('My Test', async t => {
    await showDeleteOrgModal('organisation_id');
});

您也可以通过这种方式run the asynchronous code在客户端。


更新 如果无法访问测试页面,则无法为您提供准确的测试。 但我创建了一个示例,该测试的外观如何

import { ClientFunction, Selector, t } from 'testcafe';
import { testOrgName } from './config';

fixture`fixture`
    .page`http://url`;

const trElSelector = Selector('table').find('tr').withText(testOrgName);

const cleanUpOrg = ClientFunction(() => {
    const trElement = trElSelector();
    const orgId     = trElement.id.replace('OurApplicationName_', '');

    window.OurApplicationName.ShowDeleteOrgModal(orgId);
    window.OurApplicationName.DeleteOrganisation();
}, { dependencies: { trElSelector } });

async function cleanUpAllOrgs () {
    const numberOfOrgs = await Selector('tr').withText(testOrgName).length;

    for (let i = numberOfOrgs; i > 0; i--) {
        await cleanUpOrg();
        await t.wait(200);
    }
}

test('test', async t => {
    await cleanUpAllOrgs();
});

我使用了ClientFunctionsSelectorstestOrgName变量的配置文件(您可以在FAQ中了解有关使用配置和环境变量的更多信息)。