Как я могу получить доступ к действиям приложения с помощью TestCafe? - PullRequest
2 голосов
/ 16 мая 2019

Я пытался искать ответы, но не мог найти.Я хочу написать функцию для удаления ранее использованной тестовой организации, прежде чем я начну свои тесты в testcafe.

Это довольно трудоемкое действие, если сделать это через пользовательский интерфейс.Поэтому мне интересно, можно ли использовать действия приложения и написать функцию для удаления моих тестовых данных?

Я думаю выполнить следующие шаги: 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 Ответ

7 голосов
/ 16 мая 2019

Попробуйте использовать 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');
});

Вы также можете запустить асинхронный код на стороне клиента таким образом.


UPDATE Я не могу предоставить вам точный тест без доступа к странице тестирования. Но я создал пример того, как этот тест может выглядеть

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

Я использовал ClientFunctions , Селекторы и файл конфигурации для переменной testOrgName (вы можете узнать больше об использовании конфигураций и переменных среды в FAQ ) .

...