正确输出到控制台的字符串上的空引用异常

时间:2013-05-28 20:52:53

标签: c# exception selenium reference null

我有一个用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

1 个答案:

答案 0 :(得分:0)

如果somestring为空,Contains将抛出空引用异常。这符合你的症状(比较器有一个值,但你仍然得到一个空的引用异常)。

String.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版本。