Playwright使用selectText存文本到变量遇断言及TS错误求助
修复Playwright中表格文本提取的问题
你的核心问题是误用了selectText()方法——这个方法的作用是选中页面元素内的文本,但它没有返回值(返回类型是Promise<void>),所以用它给username和password赋值时,变量最终会是undefined,这直接导致了断言失败和后续fill()的TS类型错误。
修复步骤:
替换文本提取方法
要获取元素的文本内容,应该使用textContent()或innerText()方法,这两个方法会返回元素的文本字符串:// 正确提取用户名和密码文本 const username = await page.locator('#username0').textContent(); const password = await page.locator('#passwd0').textContent();如果需要去除文本前后的空格,可叠加
trim()处理:const username = await page.locator('#username0').textContent().then(text => text?.trim()); const password = await page.locator('#passwd0').textContent().then(text => text?.trim());调整断言逻辑
textContent()可能返回null(元素不存在时),所以断言可以调整为:expect(username).toBeDefined(); expect(username).not.toBeNull(); expect(password).toBeDefined(); expect(password).not.toBeNull();解决
fill()的TS类型错误
现在username是字符串/null/undefined类型,为了类型安全,可以先做非空判断再填充:if (username) { await page.getByPlaceholder('Brugernavn').fill(username); } // 若能确保元素一定存在且有文本,也可使用非空断言 await page.getByPlaceholder('Brugernavn').fill(username!);保留截图的选中效果(可选)
如果需要截图展示文本被选中的状态,可以先调用selectText()完成选中,再提取文本:// 先选中文本用于截图 await page.locator('#username0').selectText(); await page.locator('#passwd0').selectText(); const screenshot4 = await page.locator('#CreatedUsers').screenshot(); await testInfo.attach('admin_002-usercReated_selectedPW0', { body: screenshot4, contentType: 'image/png' }); // 再提取文本内容 const username = await page.locator('#username0').textContent()?.trim(); const password = await page.locator('#passwd0').textContent()?.trim();
内容的提问来源于stack exchange,提问作者JoSSte
相关产品推荐
相关产品推荐

