如何修复:使用未分配的本地IWebElement变量

时间:2018-01-12 15:29:31

标签: c# selenium selenium-webdriver

对于以下代码,

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();,但它们对我不起作用。

有任何帮助吗?

PS。我试图在catch语句中循环找到它,这就是为什么我需要try之外的元素声明和Click()之后的元素声明。

1 个答案:

答案 0 :(得分:3)

编译器有助于修复错误。如果在NullReferenceException初始化过程中出现异常,他告诉您如果在element.Click() element,则会失败。所以他希望你在任何情况下(或默认值)分配一些东西。您有多个选项可以修复......

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;
}

但是你必须检查nullif(element != null)或者:

element?.Click(); // if not null Click is called