如何使用Selenium在文件上传前获取文件大小?
嘿,我太懂你这种卡了好几天的感觉了!你之前的写法行不通,是因为Selenium的GetAttribute没法直接访问DOM元素的JavaScript对象属性——files是input元素的JS属性,不是HTML标签上的原生属性,所以直接用GetAttribute肯定拿不到结果。
给你个靠谱的解决方案,用Selenium的JavaScript执行器来获取文件大小,这才是正确的打开方式:
// 定位文件上传控件 IWebElement fileUpload = driver.FindElement(By.Id("FileUpload")); // 把driver转换为JS执行器 IJavaScriptExecutor jsExecutor = (IJavaScriptExecutor)driver; // 执行JS代码获取文件大小(单位为字节) long? fileSizeBytes = (long?)jsExecutor.ExecuteScript("return arguments[0].files[0]?.size;", fileUpload); if (fileSizeBytes.HasValue) { // 可选:转换为KB格式,保留两位小数 double fileSizeKB = fileSizeBytes.Value / 1024.0; Console.WriteLine($"选中的文件大小是:{fileSizeKB:F2} KB"); } else { Console.WriteLine("还未选择任何文件哦!"); }
几个关键点给你提个醒:
- 必须确保用户已经选中了文件,不然
files[0]会是null,代码里用了?.可选链操作符,避免直接访问size导致报错 - 拿到的默认值是字节数,要转成KB/MB的话自己做除法即可
- 如果是支持多选的上传控件(input标签加了
multiple属性),可以遍历arguments[0].files数组,逐个获取每个文件的大小
这样应该就能顺利拿到文件大小啦!
内容的提问来源于stack exchange,提问作者Helbo
相关产品推荐
相关产品推荐

