当前位置: 首页 > 知识库问答 >
问题:

在量角器中从较大的文本源检索子字符串时出错

谭志用
2023-03-14

在我的量角器端到端测试中,我试图从注册电子邮件中提取URL,但在尝试解析较大的字符串时出错。

我得到的错误是:

**

失败: 1)MockMock获取验证链接消息:失败: regText.indexOf不是一个函数堆栈:类型错误: regText.indexOf不是一个函数在getRegLink(D:\QA\脚本\ProtractorHelloWorld\CCSpecMockMock.js:19: 27)在用户上下文。(D:\QA\脚本\ProtractorHelloWorld\CCSpecMockMock.js:37: 14)在C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\jasminewd2\index.js:112: 25在新的ManagedPromise(C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\selenium-webDrive\lib\promise.js:1077: 7)在ControlFlow.promise(C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\selenium-webDrive\lib\promise.js:2505: 12)在调度器执行(C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\jasminewd2\index.js:95: 18)在TaskQueue.execute_(C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\selenium-webDrive\lib\promise.js:3084: 14)在TaskQueue.executeNext_(C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\selenium-webDrive\lib\promise.js:3067: 27)在asyncRun(C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\selenium-webDrive\lib\promise.js:2974: 25)在C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\selenium-webDrive\lib\promise.js:668: 7来自:任务:运行它(“获取验证链接”)在UserContext的控制流中。(C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\jasminewd2\index.js:94: 19)在C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\jasminewd2\index.js:64: 48在ControlFlow.emit(C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\selenium-webDriver\lib\events.js:62: 21)在ControlFlow.shutdown_(C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\selenium-webDriver\lib\promise. js: 2674:10)shutdownTask_。微任务(C:\用户\dCoughler\AppData\漫游\npm\node_modules\量角器\node_modules\selenium-webDrive\lib\promise. js: 2599:53)来自异步html" target="_blank">测试:套件出错。(D:\QA\脚本\ProtractorHelloWorld\CCSpecMockMock. js: 35:1)在Object.(D:\QA\脚本\ProtractorHelloWorld\CCSpecMockMock. js: 2:1)在模块。_compile(内部/模块/cjs/加载器. js: 688:30)在对象。模块。_extensions... js(内部/模块/cjs/loader. js: 699:10)at Module. load(内部/模块/cjs/loader. js: 598:32)at try ModuleLoad(内部/模块/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();
  });

});

这现在给出了一个新错误:失败:未知错误:未处理的检查器错误:{“代码”:-32000,“消息”:“无法导航到无效URL”}(会话信息:chrome=71.0.3578.98)(驱动程序信息:chromedriver=2.46.628402(536cd7adbad73a3783fdc2cab92ab2ba7ec361e1),平台=Windows NT 10.0。16299 x86_64)

共有2个答案

司寇灵均
2023-03-14

问题是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));
    }   
  }         
}
林冥夜
2023-03-14

您在线上遇到错误:

browser.get(getRegLink(tRegMessage));

因为tRegMessage不是字符串。它是ElementFinder(您从这一行元素(by.className('well'))获得的;)所以,您需要从这个元素中获取文本。例如:

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

另外,您的方法getRegLink()不会返回string。因此,在第一次修复之后,您将得到一个错误,该错误将浏览器。get()应该有参数字符串

 类似资料:
  • 问题内容: 使用像leveinstein(leveinstein或difflib)之类的算法,很容易找到近似匹配。 可以通过根据需要确定阈值来检测模糊匹配。 当前要求:基于较大字符串中的阈值来查找模糊子字符串。 例如。 一种蛮力解决方案是生成长度为N-1到N + 1(或其他匹配长度)的所有子串,其中N是query_string的长度,并在它们上逐个使用levenstein并查看阈值。 在pytho

  • 问题内容: 我需要在一个很大的文本文件中搜索特定的字符串。它的构建日志包含大约5000行文本。最好的方法是什么?使用正则表达式应该不会引起任何问题吗?我将继续阅读几行,并使用简单的查找。 问题答案: 如果它是“相当大”的文件,请顺序访问各行,而不要将整个文件读入内存:

  • 本文向大家介绍如何在JSP中检查指定子字符串的字符串中的索引?,包括了如何在JSP中检查指定子字符串的字符串中的索引?的使用技巧和注意事项,需要的朋友参考一下 的FN:的indexOf()函数返回指定的子串中的索引。 语法 该FN:的indexOf()函数的语法如下- 示例 以下是解释fn:indexOf()函数功能的示例- 您将收到以下结果-

  • 问题内容: 我曾经在JavaScript中这样做: Swift没有此功能,如何做类似的事情? 问题答案: 编辑/更新: Xcode 11•Swift 5.1或更高版本 用法: 不区分大小写的样本 正则表达式样本

  • 问题内容: 在我的查询中,我想找到与许多LIKE运算符之一匹配的行。我知道这样做的3种方法,但是只有其中一种可以使用索引。 让我们从表开​​始: 插入样本数据后,我可以执行以下操作: 以上查询正确使用索引。 第二种方式: 该查询将不使用索引。我知道的最后一种方法: 与上一个查询类似,该查询将不使用索引。 这是SQL Fiddle,适用于那些想如何使用这些查询的人:http : //sqlfiddl

  • 问题内容: 我有mysql表,其中有一列将xml存储为字符串。我需要找到xml列包含给定6个字符的字符串的所有元组。没关系-我只需要知道这6个字符串是否存在即可。 因此,将文本格式设置为xml可能并不重要。 问题:如何在mysql中搜索?即 有没有一种方法可以使用LIKE运算符执行此操作? 问题答案: 您可能可以使用该子句进行一些简单的字符串匹配: 如果您需要更多高级功能,请在此处查看MySQL的