遇到System.ArgumentNullException:如何将字符串转为有效URL?
解决System.ArgumentNullException: Argument 'url' cannot be null的问题
嘿,先帮你揪出最核心的问题——变量作用域冲突!你在类里定义了一个Urlpath属性,但在Button_URL方法里又声明了一个同名的局部变量string Urlpath = dialog.ResponseText;,这就导致类级别的Urlpath完全没被赋值,一直是null。当你调用Driver.Navigate().GoToUrl(Urlpath)时,传的是那个未赋值的类属性,自然就抛出空参数异常了。
第一步:修复变量作用域问题
把方法里的局部变量声明去掉,直接给类属性赋值就行:
private string Urlpath { get; set; } private void Button_URL(object sender, RoutedEventArgs e) { var dialog = new MyDialog(); if (dialog.ShowDialog() == true) { MessageBox.Show("Refreshing a URL requires you to select a folder."); // 去掉前面的string,直接给类的Urlpath属性赋值 Urlpath = dialog.ResponseText; Status_HTML.Content = "Selected:" + "\n" + Urlpath + "\n" + "Save and/or edit any file in your folder to get started!"; } }
第二步:将字符串转换为有效Uri对象(可选但推荐)
虽然Selenium的GoToUrl方法本身支持直接传入字符串,但为了确保URL格式合法,避免后续踩坑,建议把字符串转换成Uri对象:
// 先检查Urlpath是否不为空且格式合法 if (!string.IsNullOrEmpty(Urlpath) && Uri.TryCreate(Urlpath, UriKind.Absolute, out Uri validUri)) { Driver.Navigate().GoToUrl(validUri); } else { // 处理无效URL的情况,比如提示用户输入正确的URL MessageBox.Show("请输入有效的URL地址!"); }
这里用Uri.TryCreate方法可以安全地验证并转换字符串:
- 第一个参数是你的URL字符串
- 第二个参数
UriKind.Absolute确保我们只接受完整的绝对URL(比如带http/https前缀的) - 如果转换成功,
validUri就是可用的Uri对象,直接传给GoToUrl即可;如果失败,就给用户一个友好提示。
最后再提个醒:确保调用Driver.Navigate().GoToUrl(Urlpath)的时机是在Button_URL方法执行之后,也就是Urlpath已经被正确赋值之后,不然还是会拿到null哦。
内容的提问来源于stack exchange,提问作者Sen
相关产品推荐
相关产品推荐

