Search code examples
c#selenium-webdrivermethods

C# return IWebElement (selenium) causes NullReferenceException


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


Solution

  • 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?