WebdriverIo Для асинхронных тестов и хуков убедитесь, что вызывается «done ()»; если возвращаете обещание, убедитесь, что оно разрешается - PullRequest
0 голосов
/ 07 июня 2019

Я уже видел это решение , но оно не помогло.

Я пытаюсь запустить тесты webdriver.io с помощью mocha, здесь я использую метод browser.waitUntil () из webdriver.io, более подробную информацию можно найти здесь: https://webdriver.io/docs/api/browser/waitUntil.html Я пробовал другое решение этой проблемы, включая добавление 'done' к вызову метода, а также я даю максимальное время ожидания в conf.js и здесь, 10000ms, но, тем не менее, страница, похоже, зависает на странице результатов.

Здесь время ожидания увеличивается:

   mochaOpts: {
        ui: 'bdd',
        timeout: 100000
    },

Изменено время ожидания по умолчанию для мокко на 100000 мс Добавлено выполнено в качестве обещания разрешения

it('should see product and version selected', () => {
        browser.url('//some url');
        browser.maximizeWindow();
        browser.waitUntil(() => {
            return $(ProductPage.productSelector()).isDisplayed()
        }, 100000, 'expected page is loaded');
        let productSelector = ProductPage.otherProductSelector();
        let isEnabled = productSelector.isEnabled();
        if(isEnabled == true){
            const spanEle = $('//span[contains(text(),"text")]');
            isDisplayed = spanEle.isDisplayed();
            console.log(isDisplayed);
            assert.equal(isDisplayed, true, "Passed");
        }
    })

Ошибка:

Timeout of 100000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. 

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Здесь я удалил из браузера выражение browser.waitUntil (() => {..} и добавил различные ожидания, предоставляемые WebdriverIO. Кажется, есть некоторые проблемы, связанные с возвратом обещания в этом методе, который не удалось решить это, удовлетворяя обещание или любой другой. Я знаю, пожалуйста, добавьте комментарий к этому ответу. Вот больше деталей с этим: https://github.com/webdriverio/webdriverio/issues/2361

Итак, что я изменил, это как показано ниже:

it('should see product and version selected', () => {
        browser.url('url');
        browser.maximizeWindow();
        let productSelector = $('#product-dropdown-toggle')
        let isEnabled = productSelector.isEnabled();
        if(isEnabled == true){
            const spanEle = $('//span[contains(text(),"text")]');
            isDisplayed = spanEle.isDisplayed();
            console.log(isDisplayed);
            assert.equal(isDisplayed, true, "Passed");
        }
    })


 waitForElemenDisplayed(element,timeout){
        element.waitForDisplayed(timeout);
    }
0 голосов
/ 07 июня 2019
it('should see product and version selected', (done) => {
    browser.url('//some url');
    browser.maximizeWindow();
    browser.waitUntil(() => {
        return $(ProductPage.productSelector()).isDisplayed()
    }, 100000, 'expected page is loaded');
    let productSelector = ProductPage.otherProductSelector();
    let isEnabled = productSelector.isEnabled();
    if(isEnabled == true){
        const spanEle = $('//span[contains(text(),"text")]');
        isDisplayed = spanEle.isDisplayed();
        console.log(isDisplayed);
        assert.equal(isDisplayed, true, "Passed");
    }

    done();
})

Единственное, о чем я могу думать, это то, что done не был передан для тестового обратного вызова в

it('should see product and version selected', (done) => {})

, а затем вызван в самом конце.В вашем тесте нет ничего, что возвращало бы обещание.

...