【问题标题】:how to fetch json from API using vanilla JS through Protractor如何通过 Protractor 使用 vanilla JS 从 API 获取 json
【发布时间】: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 用于像用户一样与网页交互。

标签: javascript selenium-webdriver automation protractor


【解决方案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 放在文件顶部,这似乎是另一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2018-03-16
    相关资源
    最近更新 更多