WebdriverIO+node-fetch报错:仅支持绝对URL,如何拼接baseURL到相对URL?
解决方案
你遇到的问题是因为通过link.getAttribute('href')获取的链接可能是相对路径(比如/contact、./about)或锚点(比如#section1),而node-fetch仅支持绝对URL,因此需要将测试站点的baseURL与相对路径拼接成完整的绝对地址。
修改后的完整代码
// 替换成你的测试站点基础URL const baseURL = 'https://your-test-domain.com'; const links = await $$('a'); console.log("count of the links are", links.length); // 修正原代码里的变量名笔误 // 获取所有href并过滤无效链接(空值、锚点) const urls = await links.map(link => link.getAttribute('href')); const validUrls = urls.filter(url => url && !url.startsWith('#')); // 将相对URL转换为绝对URL后发起请求 const requests = validUrls.map(url => { // 用URL API自动拼接,避免手动拼接出现的斜杠重复问题 const absoluteUrl = new URL(url, baseURL).href; return fetch(absoluteUrl); }); const responses = await Promise.all(requests); const statusCodes = responses.map(response => response.status);
关键说明
- URL API自动拼接:使用
new URL(url, baseURL)可以安全处理各种相对路径(包括/xxx、./xxx、../xxx),自动生成标准的绝对URL,无需手动处理斜杠拼接问题。 - 过滤无效链接:增加
filter步骤排除空链接和锚点(#开头的链接),避免这些无效值导致fetch报错。 - 修正笔误:原代码中
console.log里的testURLS应为links,已同步修正。
内容的提问来源于stack exchange,提问作者Dinesh Dhokale
相关产品推荐
相关产品推荐

