即使使用守夜表显示元素,它们也不可见

时间:2019-05-08 10:55:00

标签: nightwatch.js

我正在编写一个守夜代码,在使用下面给定的代码段无法有效地找到元素的情况下。我倾向于找到的元素以类popover__list-item的形式给出。我不确定我是否使用正确的方法。如何使元素可见?

这是我们开发的网站。

“第二步”:

function (client) {

        client 

        .waitForElementVisible('.user-info', 6000)

        .assert.containsText('.user-info', 'Salvin Thomas')

        .pause(2000)

        .click('.user-info')

        .pause(2000)

        .waitForElementVisible('input[class="popover__list-item"]', 40000)

        .assert.containsText('input[class="popover__list-item"]', 'Log out')
}

预期结果是弹出带有注销和帐户选项的弹出窗口作为列表项,然后从中单击注销选项。

1 个答案:

答案 0 :(得分:0)

您应该使用WebDriver协议API

function setSelectorbyDOM() {
    let elements = null;
    client.execute(selector => {
        var arr = [];
        var selectors = document.querySelectorAll(selector);
        for (var i = 0; i < selectors.length; i++) {
            if (selectors[i].clientHeight) {
                arr.push(selectors[i])
            }
        }
        return arr;
    }, ['.user-info', 'css selector'], results => {
        elements = results.value;
    });


    if (!elements.length) throw new Error('Element not found.Please check DOM.');
    return elements;
}

function clickByDOMSelector() {
    let action = null;
    const elements = setSelectorbyDOM();
    for (let i = 0; i < elements.length; i++) {
        client.elementIdClick(elements[i].ELEMENT, res => {
            action = res.status;
        });
        if (action !== 0) throw new Error(`Couldn't click to button!`)
    }
    return true;
}

const click = clickByDOMSelector();

以此类推...

致谢!