Protractor 无法打开新标签页。

4

请问我做错了什么,导致出现了这个异常:

失败:未知错误:'name'必须是一个字符串 (会话信息:chrome=53.0.2785.101) (驱动程序信息: chromedriver=2.25.426924 (649f9b868f6783ec9de71c123212b908bf3b232e),平台=Linux 3.13.0-100-generic x86_64)

function ensureNumberOfTabs(numberOfTabs) {
  return this.browser.getAllWindowHandles()
    .then(function(handles) {
      return handles && handles.length >= numberOfTabs && handles[numberOfTabs];
    });
}

this.openTab = function(index, timeout) {
  timeout = timeout || DEFAULT_WAIT_FOR_TIMEOUT;
  var thisBrowser = this.browser;
  var deferred = protractor.promise.defer();

  function errHandler(err) {
    deferred.reject(err);
  }
  //wait to open the tab
  thisBrowser.wait(ensureNumberOfTabs(index), timeout, 'waiting for opening tab #' + index);
  //switch to the tab
  thisBrowser.getAllWindowHandles().then(function(tabs) {
    var tab = tabs[index]; // this is your new window
    thisBrowser.switchTo().window(tab).then(function() {
      deferred.fulfill();
    }, errHandler);
  }, errHandler);

  return deferred.promise;
};

据我所知,我实际上是通过 && handles[numberOfTabs] 检查名称是否存在。

当然,问题有时会发生...

任何建议都将非常受欢迎:)

此问题出现在Node 6、Protractor 4.0.11、Chrome 53和Driver 2.25上,适用于Ubuntu 14。


你确定 tabthisBrowser.switchTo().window(tab) 中是一个字符串吗?看起来这可能是问题所在?堆栈跟踪告诉你错误发生的位置吗? - tehbeardedone
这就是问题所在,我不是提供tab的代码的所有者。所以我的问题是为什么我没有得到处理程序? - Andrej
再说,当我在步骤之间添加了一些sleep命令后,我现在可以打开标签页了,但是我遇到了"[ng:test] no injector found for element argument :("的问题。任何帮助都将不胜感激。 - Andrej
1
请查看此回答:https://dev59.com/v14c5IYBdhLWcg3wVpBI - tehbeardedone
1个回答

3
browser.switchTo().window() 接收到未定义/空参数时,您将看到与name相关的错误。
您可以通过直接调用 browser.switchTo().window() 并传递空参数来重现此问题。您需要进一步调试代码,以确定为什么发送了空的窗口句柄 - var tab = tabs[index];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接