В 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 () этой функции не определен
Вы также можете проверить, будет ли функция работать - она должна получать значения из одной строки таблицы, сохранять их в массиве и переходить к следующей строке, пока значение внутри строки не будет найдено - Сохраните значения из столбца



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Есть пара строк, которых там быть не должно. 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 не конструктор
Независимо от решения вам необходимо создать экземпляр TablePage, как вы это делали в файле спецификации. Оба решения работают на моем компьютере, хотя я на самом деле не запускал транспортир, просто проверил, можно ли разрешить класс и функцию, что удалось в обеих реализациях. Насколько я понимаю, в вызове функций у вас нет ничего плохого. Обратите внимание, что вы все равно должны экспортировать TablePage, как вы это делали в последней строке.
Эх, думаю, в чем проблема, return TablePage; вы удаляли, чуть выше экспорта?
нет, это не проблема с возвратом, я удалил его, но он все еще не видит содержимое TablePage, все элементы не определены, даже локаторы, когда я пытаюсь запустить из spec-файла this.text = table_page.workingBalanceField. getText (); я получаю Cannot read property 'getText' of undefined, кажется, что-то не так с импортом или функцией в начале TablePage
Я почти уверен, что удаление return TablePage решит начальную проблему. Я успешно выполнил код здесь без всего, что связано с транспортиром, потому что это не было связано с ним. Код, на который вы ссылаетесь в своих комментариях, кажется новым, его нет в исходном коде. Я бы предложил создать новый вопрос для новой ошибки.
когда я запускаю 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, хотя может запустить тест и открыть браузер,
Я также могу открывать страницы, удерживая ctrl и нажимая на имя функции, она желтая, какие пакеты вы установили для запуска кода без транспортира?
Позвольте нам продолжить обсуждение в чате.
Если вы не против, у меня другие планы на вечер воскресенья. Я уверен, что со временем вы решите проблему.
да, спасибо за ответ, я тоже сейчас не работаю, но если бы вы посмотрели завтра, если будет круто
Есть ответ stackoverflow.com/questions/52366994/…