对于下面的代码,
IWebElement element; // = new WebElement();
try
{
element = driver.FindElement(By...);
}
catch (Exception)
{
}
element.Click();
如何解决Use of unassigned local variable的错误?
我知道 Use of unassigned local variable 的错误,解决办法是最初给它赋值,但我试过 new WebElement(); 和new IWebElement(); 但它们对我不起作用。
有什么帮助吗?
附言。我试图在 catch 语句中循环并找到它,这就是为什么我需要 try 之外的元素声明,以及之后的 Click()
请您参考如下方法:
编译器帮助修复错误。他告诉您,如果 element 初始化期间出现异常,这将失败并在 element.Click() 处出现 NullReferenceException。所以他希望你在任何情况下都分配一些东西(或作为默认值)。您有多种选择来修复...
在try中使用初始化后的对象:
try
{
element = driver.FindElement(By...);
element.Click(); // safe because there was no exception
}
catch (Exception)
{
// empty catch is bad, log this at least
}
“隐藏”编译器错误,但通过为变量赋值让潜在的错误存在:
IWebElement element = null;
try
{
element = driver.FindElement(By...);
}
catch (Exception)
{
// empty catch is bad, log this at least
}
element.Click(); // still a bug if there was an exception this will cause a NullReferenceException
如果您改用 if(element != null) element.Click();,则此选项完全没问题。
或者你可以使用 catch/finally 来分配一些东西(这里是最糟糕的选择):
IWebElement element;
try
{
element = driver.FindElement(By...);
}
catch (Exception)
{
element = null;
}
但随后您必须检查 null,使用 if(element != null) 或使用:
element?.Click(); // if not null Click is called
