无效的定位器错误

Invalid Locator error

我尝试用页面对象样式重写我的测试,但出了点问题。

我使用 Class Tab,这是我的代码的一部分:

var World = require('../support/world.js');
const isAllAjaxRequests = require('../scripts/util').isAllAjaxRequests;
const isElementLocatedAndVisible = require('../scripts/util').isElementLocatedAndVisible;

module.exports.Tab = class Tab {

    constructor(data) {
        this.name = "Base";
        this.locators = {
            'nextStepIsLocked': {xpath: '//md-tab-item[@aria-selected="true"]//div[@class="cc-status red"]'},
            'isActiveTab': {xpath: '//md-tab-item[@aria-selected="true"]//span[text()="'+ data + '"]'}
        }
    }

    waitForElement(bySelector) {
        var driver = World.getDriver();
        var self = this;
        //var bySelector = self.locators[bySelector];

        return driver.wait(isAllAjaxRequests(driver), waitTimeOut).then(() => {
            //console.log(bySelector)
            return driver.wait(isElementLocatedAndVisible(bySelector), waitTimeOut);
        });
    }

    tabIsOpen(tabName) {
        var driver = World.getDriver();
        var self = this;
        var bySelector = By.xpath('//md-tab-item[@aria-selected="true"]//span[text()="'+ tabName + '"]');

        return self.waitForElement(bySelector);
    }
}

util 中的代码:

exports.isElementLocatedAndVisible = function isElementLocatedAndVisible(driver, bySelector) {
    return new Condition('element is located and visible', function(driver) {
        console.log(bySelector)
        return driver.findElements(bySelector).then((arr) => {
            if (arr.length > 0) {
                return arr[0].isDisplayed();
            }
            else {
                return false;
            }
        });
    });
};

我在测试中尝试使用:

    this.Then(/^Tab "([^"]*)" is open$/, function (tabName) {
        this.createTab(tabName);
        //var bySelector = tab.getLocator(isActiveTab);

        return tab.tabIsOpen(tabName);
});

但是我收到了 Invalid Locator error。 通过调试打印,我看到当代码转到 exports.isElementLocatedAndVisible 函数时我错过了 bySelector 值。这是undefiened。 我做错了什么?

我怀疑它只是缺少导致问题的参数。

在下一行中:

return driver.wait(isElementLocatedAndVisible(bySelector), waitTimeOut);

添加driver对象作为第一个参数,然后添加bySelector,如下:

return driver.wait(isElementLocatedAndVisible(driver, bySelector), waitTimeOut);

函数定义如下:

function isElementLocatedAndVisible(driver, bySelector)

所以,期待 driver 对象以及 bySelector