量角器-X不是函数

时间:2018-09-16 10:40:30

标签: javascript function selenium protractor automated-tests

在量角器中,我试图从我的spec文件中的另一个页面运行一个函数。

我的规格文件:

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)的另一种文件形式:

let protractor = require("protractor");
let browser = protractor.browser;
let number = 0;
let prices = [];

let TablePage = (function () {
  function TablePage() {

  }

  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;
        }
      })
    }
  };

  return TablePage;

});
module.exports = TablePage;

我收到一个错误:table_page.getPriceValuesFromList不是一个函数

你知道怎么了吗?我在另一个项目中就是这样做的,并且正在工作。 此函数的实际typeof()未定义

您还可以检查该函数是否有效-它应该从表的一行中获取值,将其保存在数组中,然后转到下一行,直到找不到行中的值-从该列保存值

1 个答案:

答案 0 :(得分:1)

不应该有几行。 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();

作为对象东方主义者,我更喜欢使用类来实现:

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;
                }
            })
        }
    };

};