Асин c обратный вызов не был вызван в течение времени ожидания, указанного в jasmine.DEFAULT_TIMEOUT_INTERVAL в транспортире - PullRequest
0 голосов
/ 29 апреля 2020

Я использую транспортир и ECMAScript 6 для разработки сквозных тестов. Но когда тест завершен, я вижу ошибку:

Message:
    Error: Timeout - Async callback was not invoked within the timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

Я перепробовал все решения, которые я нашел в StackOverflow и GitHub. Например, добавьте jasmineNodsOption в файл конфигурации, добавьте параметры, выполненные для функции тестирования, добавьте тайм-ауты для функций, ничего не помогая.

тест. js

import { doubleClick, isDisplayed, waitToBeVisible } from '../page_objects/base_page';
import HairLossPage from '../page_objects/HairLossPage';
import CartComponent from '../page_objects/components/CartComponent';

/*global expect describe beforeAll it browser*/
describe('Hair-loss. Question pages', () => {
    const heirLoss = new HairLossPage();
    const cartComponent = new CartComponent();

    beforeAll(() => {
        browser.waitForAngularEnabled(false);
        heirLoss.get();
    });

    it('Check the "CheckOut" button in the mini-cart with product', () => {
        doubleClick(heirLoss.header.card);

        waitToBeVisible(cartComponent.header.title);
        expect(isDisplayed(cartComponent.header.title)).toBe(true);

        expect(isDisplayed(cartComponent.content.shopHair)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopEd)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopSkin)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopDailyHealt)).toBe(true);
    });
});

config. js

require("@babel/register");
require("protractor");
exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',
    specs: ['./src/tests/**.e2e.js'],
    multiCapabilities: [{
        browserName: 'chrome'
    }],

    //Global configuration
    baseUrl: 'https:/facebook.com/',

    //Allure configuration
    /*global jasmine browser allure*/
    onPrepare: () => {
        browser.manage().window().maximize();
        var AllureReporter = require('jasmine-allure-reporter');
        jasmine.getEnv().addReporter(new AllureReporter());
        jasmine.getEnv().afterEach((done) => {
            if (done.status === "failed") {
                browser.takeScreenshot().then((png) => {
                    allure.createAttachment('Screenshot', () => new Buffer(png, 'base64'), 'image/png')();
                    done();
                });
            }
        });
    }
};

1 Ответ

1 голос
/ 29 апреля 2020

Я думаю, isDisplayed и waitToBeVisible являются асинхронными и застревают где-то.

Попробуйте:

 beforeAll(() => {
        console.log('Before waiting for angular enabled');
        browser.waitForAngularEnabled(false);
        console.log('After waiting for angular enabled, before heirLoss.get');
        heirLoss.get();
        console.log('After heirLoss.get');
    });

    it('Check the "CheckOut" button in the mini-cart with product', () => {
        console.log('before doubleClick');
        doubleClick(heirLoss.header.card);
        console.log('after doubleClick, before waitToBeVisible');

        waitToBeVisible(cartComponent.header.title);
        console.log('after waitToBeVisible, before first isDisplayed');
        expect(isDisplayed(cartComponent.header.title)).toBe(true);

        console.log('after first isDisplayed, before 2nd isDisplayed');
        // keep adding console.log before and after these assertions and see where it gets stuck.
        expect(isDisplayed(cartComponent.content.shopHair)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopEd)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopSkin)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopDailyHealt)).toBe(true);
    });

Как только у вас будет хорошее представление о том, где он застревает, Вы можете лучше понять, почему он там застревает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...