Javascript 量角器-X不是一个函数

Javascript 量角器-X不是一个函数,javascript,function,selenium,protractor,automated-tests,Javascript,Function,Selenium,Protractor,Automated Tests,在“量角器”中,我试图从规范文件中的另一个页面运行函数 我的规范文件: let TablePage = require("./../pages/TablePage"); let table_page = new TablePage(); let protractor = require("protractor"); let browser = protractor.browser; describe('Login', function() { beforeEach(fun

在“量角器”中,我试图从规范文件中的另一个页面运行函数

我的规范文件:

let TablePage = require("./../pages/TablePage");
let table_page = new TablePage();
let protractor = require("protractor");
let browser = protractor.browser;

   describe('Login', function() {
        beforeEach(function() {
            browser.ignoreSynchronization = true;
            browser.waitForAngular();
            jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
            browser.get("/budget");
        });

        it('should get values from list', function(){
            table_page.getPriceValuesFromList();
        });
我得到函数的另一个文件形式(TablePage.js):

让量角器=需要(“量角器”);
让browser=量角器.browser;
设数=0;
让价格=[];
让TablePage=(函数(){
函数TablePage(){
}
TablePage.prototype.getPriceValuesFromList=函数(){
用于(数字=1;数字<100;数字++){
let locator='/*[@id=“root”]/main/section/table/tbody/tr['+number+]/td[3]/div[2];
browser.findElement(By.xpath(locator)).then(function(err){
prices[number]=element(By.xpath(locator)).getText();
console.log(价格[编号])
},函数(err){
如果(错误){
打破
}
})
}
};
返回表格页;
});
module.exports=表格页;
我收到一个错误:table_page.getPriceValuesFromList不是一个函数

你知道怎么了吗?在另一个项目中,我是这样做的,而且很有效。 此函数的实际类型()未定义


您还可以检查该函数是否有效-它应该从表的一行中获取值,将其保存在数组中并转到下一行,直到找不到行中的值-保存列中的值有几行不应该存在。TablePage的定义如下:

function TablePage() { }

// Removed lines which were here.

TablePage.prototype.getPriceValuesFromList = function () {
    for (number = 1; number < 100; number++) {
        let locator = '//*[@id="root"]/main/section/table/tbody/tr[' + number + ']/td[3]/div[2]';
        browser.findElement(By.xpath(locator)).then(function (err) {
            prices[number] = element(By.xpath(locator)).getText();
            console.log(prices[number])
        }, function (err) {
            if (err) {
                break;
            }
        })
    }
};

// And removed the return TablePage();
函数TablePage(){}
//删除了此处的行。
TablePage.prototype.getPriceValuesFromList=函数(){
用于(数字=1;数字<100;数字++){
let locator='/*[@id=“root”]/main/section/table/tbody/tr['+number+]/td[3]/div[2];
browser.findElement(By.xpath(locator)).then(function(err){
prices[number]=element(By.xpath(locator)).getText();
console.log(价格[编号])
},函数(err){
如果(错误){
打破
}
})
}
};
//并删除了返回表页();
作为一个对象定向者,我更喜欢使用类实现:

class TablePage {

    getPriceValuesFromList() {
        for (number = 1; number < 100; number++) {
            let locator = '//*[@id="root"]/main/section/table/tbody/tr[' + number + ']/td[3]/div[2]';
            browser.findElement(By.xpath(locator)).then(function (err) {
                prices[number] = element(By.xpath(locator)).getText();
                console.log(prices[number])
            }, function (err) {
                if (err) {
                    break;
                }
            })
        }
    };

};
类表页{
getPriceValuesFromList(){
用于(数字=1;数字<100;数字++){
let locator='/*[@id=“root”]/main/section/table/tbody/tr['+number+]/td[3]/div[2];
browser.findElement(By.xpath(locator)).then(function(err){
prices[number]=element(By.xpath(locator)).getText();
console.log(价格[编号])
},函数(err){
如果(错误){
打破
}
})
}
};
};

对于第一种解决方案:同样的错误,对于第二种解决方案,我应该从规范文件中删除“let table_page=new TablePage();”吗?我应该如何调用该函数?我发现TablePage不是一个独立于解决方案的构造函数,您需要像在spec文件中那样实例化
TablePage
。这两种解决方案都在我的计算机上工作,尽管我实际上没有运行量角器,只是检查类和函数是否可以解析,这两种实现都成功了。就我所知,函数调用没有问题。请注意,您仍然应该像上一行一样导出TablePage。啊,我想是什么问题,您是否删除了
returnTablePage,就在导出上方?不,这不是return的问题,我删除了它,但仍然看不到TablePage的内容,所有元素都未定义,甚至定位器,当我尝试从spec文件this.text=table_page.workingBalanceField.getText()运行时;我无法读取undefined的属性'getText',TablePage开头的导入或函数似乎有问题。我很确定删除
return TablePage
可以解决最初的问题。我在这里成功地运行了代码,没有任何与量角器相关的东西,因为这与它无关。您在注释中引用的代码似乎是新的,它不在原始代码中。我建议为新错误创建一个新问题。有答案
class TablePage {

    getPriceValuesFromList() {
        for (number = 1; number < 100; number++) {
            let locator = '//*[@id="root"]/main/section/table/tbody/tr[' + number + ']/td[3]/div[2]';
            browser.findElement(By.xpath(locator)).then(function (err) {
                prices[number] = element(By.xpath(locator)).getText();
                console.log(prices[number])
            }, function (err) {
                if (err) {
                    break;
                }
            })
        }
    };

};