【问题标题】:Protractor Failed: The "url" argument must be of type string. Received type undefined量角器失败:“url”参数必须是字符串类型。接收类型未定义
【发布时间】:2020-07-21 18:45:55
【问题描述】:

我是 Protractor 的新手,正在编写 AngularJS 量角器测试。我正在尝试从 Google Chrome 控制台读取 URL,但收到错误消息“失败:“url”参数必须是字符串类型。收到的类型未定义”。我的代码是:

let address;
.
.
function readingUrl() {
    browserA.manage().logs().get('browser')
        .then(function (browserLog) {
            var i = 0;
            for (i; i <= browserLog.length - 1; i++) {
                if (browserLog[i].message.indexOf('My Url:') != -1) {
                    address = browserLog[i].message.split('My Url:')[1].toString();
                    return address;
                }
            }
        });
}

我这样调用这个函数:

browserB.get(readingUrl()).then(() => {
        browserB.sleep(3000);
    });

Chrome 控制台中的 url 如下所示:

My Url:https://www.google.com/

谁能帮帮我,我正在努力做到这一点,然后永远卡在这里

【问题讨论】:

  • 您的 readingUrl 函数没有返回任何内容。 return address 将地址返回给 .then 中的箭头函数。您需要在第一行添加一个返回,以便从此函数返回任何内容。我相信,您还需要等待 readingUrl 以返回它的值。

标签: angularjs selenium automation protractor webdriver


【解决方案1】:

这应该可以工作

readingUrl().then(url => 
  browserB.get(url)
    .then(() => browserB.sleep(3000))
)

【讨论】:

  • 你能解释一下你的答案吗,它将如何解决?
  • 虽然这个答案可能会解决问题,但它始终是better to describe 它是如何解决问题的:)
  • 我不明白为什么要删除 cmets,但正如我所说,如果这解决了问题,我将解释解决方案。否则,它是在黑暗中的镜头,因为真正的问题可能在框架中的任何地方
【解决方案2】:

试试下面的功能: 而不是从“then block”返回,而是从 readingUrl 主函数返回。

let address;
.
.
function readingUrl() {
    browserA.manage().logs().get('browser')
        .then(function (browserLog) {
            var i = 0;
            for (i; i <= browserLog.length - 1; i++) {
                if (browserLog[i].message.indexOf('My Url:') != -1) {
                    address = browserLog[i].message.split('My Url:')[1].toString();
                }
            }
        });
   return address;
}

【讨论】:

    猜你喜欢
    • 2019-11-27
    • 2019-05-13
    • 2020-09-21
    • 2019-12-14
    • 2019-11-10
    • 2020-12-22
    • 2020-11-08
    • 1970-01-01
    相关资源
    最近更新 更多