#c# #selenium #selenium-webdriver #specflow
#c# #селен #selenium-webdriver #specflow
Вопрос:
У меня возникла проблема с вводом некоторого текста в текстовое поле с помощью SendKeys. Я получаю сообщение об ошибке:
NullreferenceException was unhandled by user code
An exception of type 'System.NullReferenceException' occurred in companyautomation.dll but was not handled in user code
Additional information: Object reference not set to an instance of an object.
Во время отладки я обнаружил, что поле ввода равно нулю. Я не знаю, почему элемент равен нулю, локатор, похоже, не сработал. Это простой идентификатор для локатора.
Я проверил CSS для локатора для элемента inspect, и он правильный.
Строка, в которой содержится ошибка, элемент поля имени пользователя имеет значение null
UsernameField.SendKeys(Username);
Мой фрагмент кода выглядит следующим образом:
public class LoginPage : BasePage
{
public LoginPage(IWebDriver Browser) : base(Browser)
{
}
public void EnterUsername(string Username)
{
UsernameField.SendKeys(Username);
}
[FindsBy(How = How.CssSelector, Using = "#LoginUsername")]
private IWebElement UsernameField { get; set; }
}
public class BasePage : DriverClass
{
protected IWebDriver Driver { get; set; }
public BasePage(IWebDriver driver)
{
Driver = driver;
PageFactory.InitElements(Driver, this);
}
//** All Page Objects **//
#region Page Objects
private LoginPage LoginPage => new LoginPage(Driver);
private Browsers Browser => new Browsers();
#endregion
}
[Binding, Parallelizable]
[Scope(Tag = "Login")]
public class LoginSteps : BasePage
{
public LoginSteps(IWebDriver driver) : base(driver)
{
}
[Given(@"I login with (.*) with password (.*)")]
public void GivenILoginWith_Valid_UserWithPassword(string Username, string Password)
{
LoginPage.EnterUsername(Username);
LoginPage.EnterUserPassword(Password);
}
HTML — код:
<input value=""
data-val="true"
data-val-required="Please enter a valid username"
id="LoginUsername"
name="LoginUsername"
ng-blur="vm.analytics.push({ 'category' : 'Login' , 'action' : 'Left Username field', 'label' : 'Language: en'})"
ng-focus="vm.analytics.push({ 'category' : 'Login' , 'action' : 'Enter Username field', 'label' : 'Language: en'})"
placeholder="Username"
title="Username"
type="text">
Комментарии:
1. Где вы инициализируете свойство LoginPage в LoginSteps? Вы уверены, что это поле UsernameField имеет значение null, а не свойство LoginPage в вашем классе определения шага?
2. LoginPage создается в классе BasePage, LoginSteps наследует базовую страницу. Как мне инициализировать свойство LoginPage в LoginSteps, если я не сделал это правильно? Спасибо.