Исключение C #: исключение NullReferenceException

#c# #selenium

#c# #selenium

Вопрос:

Я получаю следующее сообщение во время выполнения моего теста.

Сообщение:

Автоматизация метода тестирования.Тест1.Общее исключение: System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.

Автоматизация.Библиотека.Контрольный список () в C:Documents и НастройкиАдминистратор Мои документы Visual Studio 2010 Проекты АвтоматизацияAutomationLibrary.cs: строка 152

Автоматизация.Тест1.General() в C:Documents и Настройки Администратор Мои документы Visual Studio 2010 Проекты Автоматизация AutomationTest1.cs: строка 72

Library.cs (суперкласс)

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Selenium;
using System.IO;
using System.Reflection;
using System.Net;
using System.Configuration;

namespace Automation
{
[TestClass]
public class Library
{
    public ISelenium Sel;

    // Open browser
    public void OpenBrowser(out ISelenium selenium, out StringBuilder verificationErrors)
    {
        selenium = new DefaultSelenium(GetAppConfig("TestMachine"), 4444, GetAppConfig("Browser"), GetAppConfig("URL"));
        selenium.Start();
        selenium.Open(GetAppConfig("URL"));
        verificationErrors = new StringBuilder();
    }

    // Returns the value of the passed key from App.config
    public string GetAppConfig(string key)
    {
        return ConfigurationManager.AppSettings[key].ToString();
    }

    // Check for  Login
    public void CheckLogIn()
    {
        if (Sel.IsElementPresent(GetAppConfig("SignOn")))
        {
            Sel.Type(GetAppConfig("UserNameField"), GetAppConfig("UserName"));
            Sel.Type(GetAppConfig("PWDField"), GetAppConfig("PWD"));
            Sel.Click(GetAppConfig("Go"));
        }

        else
        {
            // do nothing
        }
    }
}
  

}

Test1.cs (подкласс)

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Selenium;
using System.IO;
using System.Reflection;
using System.Net;
using System.Configuration;

namespace Automation
{
[TestClass]
public class Test1
{
    public ISelenium Sel;
    public StringBuilder Err;
    Boolean bNextFlag = false;
    Library Lib = new Library();

    // Constructor
    public Test1()
    {
        // Launch browser with application URL
        Lib.OpenBrowser(out Sel, out Err);
        Sel.WindowMaximize(); 
        Lib.CheckLogIn();
    }

    [TestMethod]
    public void General()
    {
        // Verify  Tab
        if (Sel.IsElementPresent(Lib.GetAppConfig("TAB")))
        {
            Sel.Click(Lib.GetAppConfig("TAB"));
            bNextFlag = true;
        }

        else
        {
           // do something
        }
    }
}
  

}

app.config.xml

 <?xml version="1.0" encoding="utf-8" ?>
  

 <add key="TestMachine" value="localhost"/>
<add key="Browser" value="*iexplore"/>
<add key="URL" value="http://localhost//Default.aspx"/>


<!-- CheckLogIn-->
<add key="SignOn" value="//*[@id=amp;quot;LogInamp;quot;]"/>
<add key="UserNameField" value="//*[@id=amp;quot;usernameamp;quot;]"/>
<add key="PWDField" value="//*[@id=amp;quot;pwdamp;quot;]"/>
<add key="Go" value="//*[@id=amp;quot;gobuttonamp;quot;]"/>
<add key="UserName" value="admin"/>
<add key="PWD" value="password"/>
<!-- End of  CheckLogIn-->

<!-- Object Definitions-->

<add key="TAB" value="//*[@id=amp;quot;Tabamp;quot;]"/>

<!-- End of Object Definitios-->
  

Ответ №1:

Ну, я действительно не вижу вопроса в вашем сообщении, поэтому, полагаю, я укажу на очевидное…

Ваша ошибка указывает на то, что в этом методе где-то выбрасывается NullReferenceException :

 public void CheckLogIn()
{
    if (Sel.IsElementPresent(GetAppConfig("SignOn")))
    {
        Sel.Type(GetAppConfig("UserNameField"), GetAppConfig("UserName"));
        Sel.Type(GetAppConfig("PWDField"), GetAppConfig("PWD"));
        Sel.Click(GetAppConfig("Go"));
    }
    else
    {
        // do nothing
    }
}
  

Sel является null . Нигде в вашем коде вы на самом деле не инициализируете его. Вам нужно будет инициализировать его где-нибудь вроде:

 Sel = new SomeTypeThatImplementsISelenium();
  

Кроме того, GetAppConfig не рекомендуется в соответствии с документами.

Комментарии:

1. Спасибо за ответ, но я не уверен, что понимаю, что вы подразумеваете под инициализацией Sel. Как мне его инициализировать?

2. В качестве ссылочного типа значением по умолчанию для Sel будет null. Вам нужно присвоить ему экземпляр чего-либо, что реализует ISelenium , либо приняв его в качестве параметра вашего конструктора, либо создав новый объект.

Ответ №2:

Да, возможно, вам потребуется инициализировать экземпляр object, прежде чем вы сможете использовать любой из его методов. Простой способ разобраться с этим — добавить точку останова где-нибудь перед выдачей ошибки и использовать окно просмотра для инициализации selenium и посмотреть, что возвращает Sel.isElementPresent(GetAppConfig(«SignOn»)) — true или false.

Ответ №3:

общедоступный ISelenium Sel;

Я вижу, что Sel определен, но никогда не присваиваю ему значение.