javascript - Protractor - X 不是函数

标签 javascript function selenium protractor automated-tests

在 Protractor 中,我尝试从规范文件内的另一个页面运行函数。

我的规范文件:

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()这个函数是未定义的

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

最佳答案

有几行不应该出现在那里。 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;
                }
            })
        }
    };

};

关于javascript - Protractor - X 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52353255/

相关文章:

r - 如何在 df 中添加具有特定条件的列

java - 如何从ArrayList中获取最大值

java - 元素 MyElement 在点 (x, y) 处不可点击...其他元素将收到点击

python - 使用 selenium 和 python 从 DOM 中查找第二个元素

javascript - 页面加载 ng2 后无法获取组件的 html 元素

javascript - 将 PHP 变量分配给 JavaScript 变量,值正在消失

javascript - JS : trouble with earsing buttons with function

java - 方法/功能差异的澄清

javascript - 嵌套的 ng-repeat 以创建具有不同数据的多个表

javascript - Python-Django 和 PyQt4 的问题