如何通过 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 中创建和操作 Promise?
如何在 Angularjs Protractor 中使用系统环境变量?