#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 определен, но никогда не присваиваю ему значение.