如何通过 Protractor 使用 vanilla JS 从 API 获取 json

Posted

技术标签:

【中文标题】如何通过 Protractor 使用 vanilla JS 从 API 获取 json【英文标题】:how to fetch json from API using vanilla JS through Protractor 【发布时间】:2022-01-06 16:02:17 【问题描述】:

我正在尝试从 tomtom api 下载 2 个位置之间的距离。

量角器不让我用

*fetch - 未定义 fetch - 请使用 import

*import - 不能在模块外使用 import 语句

*当我添加时


  type: module

到 package.json - 量角器停止工作,因为没有完整的代码是 ES 的模块

*browser.get - 使用 json 数据打开 http,但我无法提取它。

还有其他方法吗?我尝试将 json 导入到不同的文件并导出 response.data,但模块错误也阻止了我这样做。

【问题讨论】:

您能解释一下您使用量角器调用 API 的用例吗? 我正在构建工作所需的自动化,Protractor 正在提取地理位置,然后需要将其传递给 tomtom API 以检查距离。 据我所知,protractor 用于测试网络应用程序,它的 api 用于像用户一样与网页交互。 【参考方案1】:

Protractor 用于测试 Angular 网页,但你可以让浏览器执行任意 javascript,但要使用 fetch,你需要使用 window

function getTomTomData() 
  //replace this with your tomtom api call, and transform the response
  return window.fetch(TOM_TOM_URL);


browser.executeScript(getTomTomData).then(res=> 
  //do something with the response
);

【讨论】:

sry @Alan,但我不确定你用你的 api 调用替换它是什么意思。我的 api 调用是一个简单的 http 请求 => 'api.tomtom.com/routing/1/calculateRoute/…*****' 我尝试了 window.fetch('url'),但页面停止加载 页面停止加载可能表明异常被抛出但未被处理,导致页面脚本停止。【参考方案2】:

我没有设法在我的脚本上运行 node-fetch,因为 Protractor 一直拒绝导入。我设法用 require 'https'

解决了它

const https = require('https');

let measureDistance = async function(pickup, dropoff) 
    let url = `https://api.tomtom.com/routing/1/calculateRoute/$pickup[0]%2C$pickup[1]%3A$dropoff[0]%2C$dropoff[1]/json?routeType=shortest&avoid=unpavedRoads&key=uwbU08nKLNQTyNrOrrQs5SsRXtdm4CXM`;
    await https.get(url, res => 
        let body = '';
          
        res.on('data', chunk => 
            body += chunk;
        );
            
        res.on("end", () => 
            try 
                let json = JSON.parse(body);
                howFar = json.routes[0].summary.lengthInMeters;
             catch (error) 
                console.error(error.message);
            
        ).on("error", (error) => 
            console.error(error.message);
        );
    );
;
此外,我曾经像在 Ruby 中一样将 require 放在文件顶部,这似乎是另一个问题。

【讨论】:

以上是关于如何通过 Protractor 使用 vanilla JS 从 API 获取 json的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio Code 中使用 Typescript 和 Jasmine 框架编写 Protractor 测试脚本?

如何使用Protractor测试mdToast的渲染文本?

如何在 Protractor 中创建和操作 Promise?

如何在 Angularjs Protractor 中使用系统环境变量?

Protractor-nodejs:如何从 url 中捕获动态文本

如何在Protractor中写入Excel文件