элемент webdriverio не определен внутри функции стрелки - PullRequest
0 голосов
/ 30 марта 2020

Я работаю над проектом автоматизации webdriverio. У меня есть следующий код.

waitUntilVisible(element, maxTimeOut) {
    console.log("********** PARAMETER ************" + element);

    const testelement = $('#identifierId');

    browser.waitUntil(testelement => {

        console.log("************** INSIDE *********" + testelement);

        return testelement.isDisplayed();

    }, maxTimeOut, 'Wait for element to be visible');
}

Завещание всегда возвращается неопределенным. Может ли кто-нибудь подсказать мне, что идет не так?

Ответы [ 2 ]

1 голос
/ 31 марта 2020
/**
 * Check if the given element is (not) visible
 * @param  {String}   selector   Element selector
 * @param  {String}   falseCase Check for a visible or a hidden element
 */
const isDisplayed = async (selector, falseCase) => {
    let elem = await browser.$(selector);
    const displayed = await elem.isDisplayed();
    if (falseCase) {
        expect(displayed).to.not
            .equal(true, `Expected element "${selector}" not to be displayed`);
    } else {
        expect(displayed).to
            .equal(true, `Expected element "${selector}" to be displayed`);
    }
}

используйте browser. $ (Селектор) и используйте этот элемент для продолжения теста. Я добавил метод, чтобы проверить, является ли элемент isDisplayed.

0 голосов
/ 28 апреля 2020

Почему бы не использовать waitForDisplayed ?

Но если вы хотите использовать свою собственную - у вас есть проблема с вызовом вашей функции


waitUntilVisible(element, maxTimeOut) {
    console.log("********** PARAMETER ************" + element);
    //this is never called due same name of variable in fn waitUntil
    const testelement = $('#identifierId');

Возможные исправления:

// if you want to pass selector 
waitUntilVisible(elementSelector, maxTimeOut) {
    console.log("********** PARAMETER ************" + elementSelector);
    browser.waitUntil(testelement => {
        console.log("************** INSIDE *********" + elementSelector);
        return $(elementSelector).isDisplayed();
    }, maxTimeOut, 'Wait for element to be visible');
}

// if you want to pass WebDriverIO object 
waitUntilVisible(element, maxTimeOut) {
    console.log("********** PARAMETER ************");
    browser.waitUntil( () => {
        console.log("************** INSIDE *********");
        return element.isDisplayed();
    }, maxTimeOut, 'Wait for element to be visible');
}

...