如何用Playwright(C#)获取嵌套表格中input元素的value值?
解决Playwright C#获取input元素value属性的问题
你遇到的核心问题是混淆了HTML的value属性和DOM元素的value属性,另外AllTextContentsAsync()并不适用于input元素的取值。下面是具体的解决方法:
1. 正确获取动态/静态value值
如果input的value是通过JavaScript动态设置的(或者即使是静态的,这也是更可靠的方式),直接通过DOM元素的value属性获取,而非HTML属性:
方式一:使用Locator的EvalAsync(推荐)
// 获取所有匹配input的value值 var plannerValues = await Page.Locator("//*[@summary='Planners']/tbody/tr/td[3]/input") .AllAsync() .Select(async el => await el.EvalAsync<string>("element => element.value")); var values = await Task.WhenAll(plannerValues); // 输出结果:values[0]是Steve,values[1]是Mark foreach (var val in values) { Console.WriteLine(val); }
方式二:使用QuerySelectorAll结合EvalAsync
var inputElements = await Page.QuerySelectorAllAsync("//*[@summary='Planners']/tbody/tr/td[3]/input"); var values = new List<string>(); foreach (var element in inputElements) { // 执行JS获取DOM的value属性 var value = await element.EvalAsync<string>("el => el.value"); values.Add(value); }
2. 为什么之前的方法失效?
AllTextContentsAsync():这个方法获取的是元素内部的文本内容,input元素的文本内容是空的,所以永远拿不到value值。GetAttributeAsync("value"):这个方法获取的是HTML源码里的value属性值,如果页面加载后JS动态修改了input的value,HTML里的初始属性不会同步更新,所以拿到的可能是旧值或者空。
3. 验证定位是否准确
如果还是拿不到值,先确认你的XPath是否真的选中了目标元素:
// 暂停执行,打开Playwright Inspector检查Locator await Page.Pause();
在Inspector里输入你的XPath,看是否正确选中了包含Steve和Mark的两个input元素。
内容的提问来源于stack exchange,提问作者Fredrik Thörnblad
相关产品推荐
相关产品推荐

