我有一个用c#编写的Selenium测试脚本,它输入一个搜索值,然后从返回的搜索结果中查找特定的结果。我的问题是我一直在结果字符串上得到一个“空引用异常”。令人困惑的是,如果我将字符串输出到控制台(简单的Console.WriteLn语句),它打印字符串就好了。只有当我尝试使用字符串执行某些操作时才会引发异常。有什么想法可能会发生这种情况吗?
以下相关代码:
IWebElement listElement2 = driver.FindElement(By.ClassName("FixedTables"));
itemsList = new List<IWebElement>(listElement2.FindElements(By.TagName("a")));
foreach (IWebElement item in itemsList)
{
string comparator = item.GetAttribute("onclick");
Console.WriteLine(comparator);//this works to print the string....
//if (comparator.Contains(somestring))//this fails and throws the exception
//{
// item.Click();
// break;
//}
}
编辑:我将代码更改为:
string comparator = item.GetAttribute("onclick");
Console.WriteLine(comparator);
if (comparator == null) Console.WriteLine("Is Null");
if (somestring == null) Console.WriteLine("Somestring is Null");
这是我从控制台输出的:
get_emp_risk_details('560','');
Null
get_emp_risk_details('490','');
Null
答案 0 :(得分:0)
如果somestring
为空,Contains
将抛出空引用异常。这符合你的症状(比较器有一个值,但你仍然得到一个空的引用异常)。
在“例外”部分中请注意,对于ArgumentNullException
,如果值为null,则抛出Contains(value)
。
为.Net 4.0及更高版本编写代码的更安全的方法
if (comparator == null) {
Console.WriteLine("comparator="+comparator);
} else {
if ((!String.IsNullOrWhiteSpace(somestring)) && comparator.Contains(somestring)) }
item.Click();
break;
}
或
if ((somestring != null) && (somestring.Length > 0)
&& comparator.Contains(somestring))
{
item.Click();
break;
}
用于早期的.Net版本。