// tests/song-urls.test.js import { test } from '@playwright/test'; test('获取林俊杰六首歌曲的URL', async ({ page }) => { // 导航到首页 await page.goto('http://localhost:3000/'); // 等待页面加载完成 await page.waitForLoadState('networkidle'); // 等待热门歌曲区域加载完成 await page.waitForSelector('.hot-songs-section'); // 获取所有热门歌曲列表项 await page.waitForSelector('.songs-list .song-item'); const songItems = await page.locator('.songs-list .song-item').all(); const songCount = songItems.length; console.log(`找到 ${songCount} 首热门歌曲`); // 歌曲URL存储对象 const songUrls = {}; // 遍历所有歌曲项 for (let i = 0; i < songCount; i++) { // 每次都需要重新获取元素,因为页面可能会刷新 await page.waitForSelector('.songs-list .song-item'); const updatedSongItems = await page.locator('.songs-list .song-item').all(); const songItem = updatedSongItems[i]; // 获取歌曲名称 const songTitleElement = await songItem.locator('.song-info h3'); const songTitle = await songTitleElement.textContent(); // 获取歌手名称 const artistElement = await songItem.locator('.song-info p'); const artist = await artistElement.textContent(); console.log(`\n正在处理第 ${i + 1} 首歌曲: ${songTitle} - ${artist}`); // 点击歌曲项,进入详情页 await songItem.click(); // 等待页面加载完成 await page.waitForURL(/songs\/\d+/); await page.waitForLoadState('networkidle'); // 获取音频元素的src属性(歌曲URL) await page.waitForSelector('audio'); const audioElement = await page.locator('audio'); const audioUrl = await audioElement.getAttribute('src'); console.log(`歌曲URL: ${audioUrl}`); // 将歌曲URL存储到对象中 songUrls[songTitle] = audioUrl; // 点击返回按钮,回到首页 await page.waitForSelector('.back-btn'); const backButton = await page.locator('.back-btn'); await backButton.click(); // 等待回到首页 await page.waitForURL('http://localhost:3000/'); await page.waitForLoadState('networkidle'); } // 输出所有歌曲URL console.log('\n\n=== 林俊杰六首歌曲的URL ==='); for (const [songTitle, url] of Object.entries(songUrls)) { console.log(`${songTitle}: ${url}`); } // 验证是否获取到了六首歌曲的URL console.log(`\n共获取到 ${Object.keys(songUrls).length} 首歌曲的URL`); });