Ошибка извлечения подстроки из большего текстового источника в Protractor - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь извлечь URL из регистрационного электронного письма в моем сквозном тесте для Protractor, но я получаю ошибки, пытаясь проанализировать большую строку.

Я получаю следующую ошибку:

*

Сбои: 1) MockMock Получить ссылку для проверки Сообщение: Ошибка: regText.indexOf не является функцией Stack: TypeError: regText.indexOf не является функцией в getRegLink (D: \ QA \ Scripting \ ProtractorHelloWorld \ CCspecMockMock.js: 19: 27) в UserContext.(D: \ QA \ Scripting \ ProtractorHelloWorld \ CCspecMockMock.js: 37: 14) в C: \ Users \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ jasminewd2 \ index.js: 112: 25 в новой версии ManagedPromise(C: \ Users \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ prom.js: 1077: 7) в ControlFlow.promise (C: \ Users \ dcoughler \ AppData \ Roaming \npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ обещание: js: 2505: 12) в schedulerExecute (C: \ Users \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ jasminewd2 \ index.js:95:18) в TaskQueue.execute_ (C: \ Users \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ prom.js: 3084: 14) в TaskQueue.executeNext_ (C: \Пользователи \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ обещание: js: 3067: 27) в asyncRun (C: \ Users \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \node_modules \ selenium-webdriver \ lib \ обещание: js: 2974: 25) вC: \ Users \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ advance.js: 668: 7 От: Задача: Запустить его («Получить ссылку для проверки») в потоке управления в UserContext,(C: \ Users \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ jasminewd2 \ index.js: 94: 19) в C: \ Users \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \jasminewd2 \ index.js: 64: 48 в ControlFlow.emit (C: \ Users \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ events.js: 62: 21) в ControlFlow.shutdown_ (C: \ Users \ dcoughler \ AppData \ Roaming \ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ обещание.js: 2674: 10) в shutdownTask_.MicroTask (C: \ Users \ dcoughler \ AppData \ Roaming\ npm \ node_modules \ protractor \ node_modules \ selenium-webdriver \ lib \ обещание: js: 2599: 53) Из асинхронного теста: ошибка в Suite.(D: \ QA \ Scripting \ ProtractorHelloWorld \ CCspecMockMock.js: 35: 1) в объекте.(D: \ QA \ Scripting \ ProtractorHelloWorld \ CCspecMockMock.js: 2: 1) в модуле Module._compile (внутренний / modules / cjs / loader.js: 688: 30) в Object.Module._extensions..js (внутренний / modules/cjs/loader.js:699:10) в Module.load (внутренний / modules / cjs / loader.js: 598: 32) в tryModuleLoad (внутренний / modules / cjs / loader.js: 537: 12) 1 спецификация,1 сбой Закончено за 0,622 секунды

*

Вот код:

// spec.js
describe('MockMock', function() {

  var tRegMessage = element(by.className('well'));
  var tabledata = $$('./table');
  // get rows 
  var rows = tabledata.all(by.tagName("tr"));
  // get cell values
  var cells = rows.all(by.tagName("td"));


  var commonfunctions = require('./CCCommonFunctions.js');

  function clickRegistration(email) {
    element(by.xpath("//td[. = '" + email + "']/following-sibling::td/a")).click();
}

  function getRegLink(regText) {
      var startUrl = regText.indexOf("http://");
      var endUrl = regText.indexOf("Thank you",startUrl);
      getRegLink = regText.substring(startUrl,endUrl);
  }

  function Login(username, password) {
    fUserName.sendKeys(username);
    fPassword.sendKeys(password);
    commonfunctions.ccClick(bLoginButton);
  }

  beforeEach(function() {
    browser.waitForAngularEnabled(false);
    browser.get('http://ns-rd-app-wi:2525/');
  });

it('Get verification link', function() {
    clickRegistration('PhillipPies@mock.com');
    browser.get(getRegLink(tRegMessage));
    browser.pause();
  });

  });

Как мне разбирать строки в транспортире?Кажется, я слишком привык к VBScript.

=================================================================

Я внес изменения на основе комментариев ниже,но я все еще застрял:

describe('MockMock', function() {

  var tRegMessage = element(by.className('well'));
  var tabledata = $$('./table');
  // get rows 
  var rows = tabledata.all(by.tagName("tr"));
  // get cell values
  var cells = rows.all(by.tagName("td"));


  var commonfunctions = require('./CCCommonFunctions.js');

  function clickRegistration(email) {
    element(by.xpath("//td[. = '" + email + "']/following-sibling::td/a")).click();
}

  function getRegLink(regMessage) {
  return new Promise(resolve => {
    regMessage.getText().then(text => {
      var startUrl = text.indexOf("http://");
      var endUrl = text.indexOf("Thank you",startUrl);
      resolve(text.substring(startUrl,endUrl-2))
    }  ) 
  })         
}

  beforeEach(function() {
    browser.waitForAngularEnabled(false);
    browser.get('http://ns-rd-app-wi:2525/');
  });


it('Get verification link', function() {
    clickRegistration('PhillipPies@mock.com');
    var regURL=getRegLink(tRegMessage.getText());
    browser.get(regURL.toString());
    browser.pause();
  });

});

Теперь выдается новая ошибка: Сбой: неизвестная ошибка: необработанная ошибка инспектора: {"code": - 32000, "message": "Невозможно перейти к неверному URL"} (Информация о сеансе: chrome = 71.0.3578.98) (Информация о драйвере: chromedriver = 2.46.628402 (536cd7adbad73a3783fdc2cab92ab2ba7ec361e1), платформа = Windows NT 10.0.16299 x86_64)

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Проблема в tRegMessage не в строке.Это ElementFinder.Сначала вам нужно позвонить getText().

function getRegLink(regMessage) {
  return new Promise(resolve => {
    regMessage.getText().then(text => {
      var startUrl = text.indexOf("http://");
      var endUrl = text.indexOf("Thank you",startUrl);
      resolve(text.substring(startUrl,endUrl));
    }   
  }         
}
0 голосов
/ 04 февраля 2019

Вы получили сообщение об ошибке:

browser.get(getRegLink(tRegMessage));

, поскольку tRegMessage не string.Это ElementFinder (вы получили из этой строки element(by.className('well'));) Итак, вам нужно взять текст из этого элемента.Например:

it('Get verification link', function() {
    const url = tRegMessage.getText();
    clickRegistration('PhillipPies@mock.com');
    browser.get(getRegLink(url));
    browser.pause();
  });

Кроме того, ваш метод getRegLink() не возвращает string.Итак, после первого исправления вы получите ошибку, что browser.get() должен иметь аргумент string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...