Транспортир - X не функция

В 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.info(prices[number])
      }, function (err) {
        if (err) {
          break;
        }
      })
    }
  };

  return TablePage;

});
module.exports = TablePage;

Я получаю сообщение об ошибке: table_page.getPriceValuesFromList не является функцией

Вы знаете, что случилось? Я делал это в другом проекте, и он работал. Настоящий typeof () этой функции не определен

Вы также можете проверить, будет ли функция работать - она ​​должна получать значения из одной строки таблицы, сохранять их в массиве и переходить к следующей строке, пока значение внутри строки не будет найдено - Сохраните значения из столбца

Есть ответ stackoverflow.com/questions/52366994/…

jedrek cienicki 17.09.2018 18:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
71
1

Ответы 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.info(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.info(prices[number])
            }, function (err) {
                if (err) {
                    break;
                }
            })
        }
    };

};

С первым решением: та же ошибка, со вторым решением я должен удалить «let table_page = new TablePage ();» из файла спецификации? как мне вызвать функцию? Я получаю TablePage не конструктор

jedrek cienicki 16.09.2018 15:31

Независимо от решения вам необходимо создать экземпляр TablePage, как вы это делали в файле спецификации. Оба решения работают на моем компьютере, хотя я на самом деле не запускал транспортир, просто проверил, можно ли разрешить класс и функцию, что удалось в обеих реализациях. Насколько я понимаю, в вызове функций у вас нет ничего плохого. Обратите внимание, что вы все равно должны экспортировать TablePage, как вы это делали в последней строке.

Bouke 16.09.2018 16:38

Эх, думаю, в чем проблема, return TablePage; вы удаляли, чуть выше экспорта?

Bouke 16.09.2018 16:43

нет, это не проблема с возвратом, я удалил его, но он все еще не видит содержимое TablePage, все элементы не определены, даже локаторы, когда я пытаюсь запустить из spec-файла this.text = table_page.workingBalanceField. getText (); я получаю Cannot read property 'getText' of undefined, кажется, что-то не так с импортом или функцией в начале TablePage

jedrek cienicki 16.09.2018 17:31

Я почти уверен, что удаление return TablePage решит начальную проблему. Я успешно выполнил код здесь без всего, что связано с транспортиром, потому что это не было связано с ним. Код, на который вы ссылаетесь в своих комментариях, кажется новым, его нет в исходном коде. Я бы предложил создать новый вопрос для новой ошибки.

Bouke 16.09.2018 17:54

когда я запускаю let text = element (By.xpath ('// * [@ id = "root"] / main / section / div / div / div [5‌] / div / div [1]')). getT‌ Ext (); ожидать (text.toMatch ("/ d {0-3}?,? / d {0-3}? /.? / d {0-3}?")); Я получаю text. ToMatch - это не функция, он не видит даже проблем с пакетом jasmine-node, хотя может запустить тест и открыть браузер,

jedrek cienicki 16.09.2018 17:57

Я также могу открывать страницы, удерживая ctrl и нажимая на имя функции, она желтая, какие пакеты вы установили для запуска кода без транспортира?

jedrek cienicki 16.09.2018 17:58

Позвольте нам продолжить обсуждение в чате.

jedrek cienicki 16.09.2018 18:00

Если вы не против, у меня другие планы на вечер воскресенья. Я уверен, что со временем вы решите проблему.

Bouke 16.09.2018 18:44

да, спасибо за ответ, я тоже сейчас не работаю, но если бы вы посмотрели завтра, если будет круто

jedrek cienicki 16.09.2018 19:35

Другие вопросы по теме