51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

C# 返回 IWebElement (selenium) 导致 NullReferenceException

英文:

C# return IWebElement (selenium) causes NullReferenceException

问题 {#heading}

public IWebDriver bot;

void DataGrabber(object sender, RoutedEventArgs e)
{
string user = "...";
string pass = "...";


    bot = UserLogin(user, pass);

    bot.Navigate().GoToUrl("https://example.com/data"); //NullReferenceException gets raised here




}


static IWebDriver UserLogin(string user, string pass)
{
IWebDriver bot = new ChromeDriver();


    bot.Navigate().GoToUrl("https://example.com/loginform");
    // Login Stuff....
    return bot;



`}
`

英文:

I am new to C# and working with methods. My attempt was to create a seperate method for logging the user in. The Code looks something like

public IWebDriver bot;

void DataGrabber(object sender, RoutedEventArgs e)
{
string user = \"...\";
string pass = \"...\";


    UserLogin(user, pass);

    bot.Navigate().GoToUrl("https://example.com/data"); //NullReferenceException gets raised here




}


static IWebDriver UserLogin(string user, string pass)
{
IWebDriver bot = new ChromeDriver();


    bot.Navigate().GoToUrl("https://example.com/loginform");
    // Login Stuff....
    return bot;



`}
`

how do I properly define bot, so that the DataGrabber() method knows what it is?

I removed the public IWebDriver bot; definition in the beginning but that just results in the bot not being recognized as a variable at all ("The name "bot" is not available in the current context").

I also attempted to move the UserLogin() method before the DataGrabber() method, but this did not help (bot still not recognized within DataGrabber() function).

I am certain that this is an easy thing to answer, however searching online did not return anything useful

答案1 {#1}

得分: 1

你从UserLogin中返回(本地变量)bot,但你从未将其分配给类级别字段。换句话说:UserLogin中的botDataGrabber中的bot不同。

一种解决方法:

DataGrabber中,将

UserLogin(user, pass);

更改为

bot = UserLogin(user, pass);

以设置类级别字段。

有关该异常的更多详细信息,请参见什么是NullReferenceException,我该如何修复它?。 英文:

You return (the local variable) bot from UserLogin, but you never assign it to the class-level field. In other words: the bot in UserLogin is different from the bot in DataGrabber.

One solution:

in DataGrabber, change

UserLogin(user, pass);

to

bot = UserLogin(user, pass);

to set the class-level field.

For further details about that exception, see What is a NullReferenceException, and how do I fix it?


赞(0)
未经允许不得转载:工具盒子 » C# 返回 IWebElement (selenium) 导致 NullReferenceException