Вызываю методы цепочкой
Batch batch = new Batch(driver)
.inStatusDropdownSelectItem("Not Started")
.btnSearch()
.clickRandomElementInTable()
.clickbtnContinue();
Реализации самих методов:
public Batch inStatusDropdownSelectItem(String item)
{ dropdownStatus.click();
findItem(item);
return this;
}
public Batch btnSearch()
{
btnSearch.click();
return new Batch(driver);
}
public Batch clickRandomElementInTable()
{
driver.findElement(By.xpath("//div[@id='grdOffResult']/table/tbody/tr["+ getRandomInt(15) +"]/td[11]/input")).click();
return new Batch(driver);
}
public UpdateReq clickbtnContinue()
{
btnContinue.click();
return new UpdateReq(driver);
}
Появляется ошибка
java.lang.NullPointerException
java.lang.NullPointerException
at Project.Batch.clickRandomElementInTable(Batch.java:76)
Причем если не использовать цепочки, то все работает хорошо
batch.inStatusDropdownSelectItem("Not Started");
batch.btnSearch();
batch.clickRandomElementInTable();
batch.clickbtnContinue();
Посоветуйте как избежать ошибки java.lang.NullPointerException и какие есть особенности при работе с цепочками методов?
ArtOfLife
(Sergey Korol)
04.Декабрь.2014 10:13:28
#2
Первым советом будет внимательное прочтение FAQ . Раз уж вы только зарегистрировались, будьте добры соблюдать правила форума и не клонировать темы. Ваша предыдущая не просто так была сокрыта. Ввиду того, что 3 личных сообщения были проигнорированы, модераторы имеют полное право удалить тему без объяснений. На первый раз ограничимся предупреждением. Клон будет удален.
1 лайк
А у вас соучаем там где findElement - driver не null?
ArtOfLife
(Sergey Korol)
04.Декабрь.2014 12:10:46
#6
Покажите, как вы драйвер храните / передаете по пейджам. Скорее всего где-то теряется связь с объектом, потому и вылетает NPE.
я нигде драйвер дополнительно не храню(
строчка 76 класа Batch - можете ее прислать?
ArtOfLife
(Sergey Korol)
04.Декабрь.2014 12:25:27
#9
Вот, посмотрите пример использования PageObject pattern от @vmaximv
Обратите внимание на BasePage класс.
driver.findElement(By.xpath("//div[@id='grdOffResult']/table/tbody/tr["+ getRandomInt(15) +"]/td[11]/input")).click();
public int getRandomInt(int max){
return (int)(Math.random()*(max-1)+1);
}
дебагером смотрели?
driver у Вас похоже null
мой еклипс зависает при дебаге((
Ну вот.
Вам нужно получше продумать хранение инстанса driver. Чтобы он случайно не обнулялся
Taras
(Taras)
04.Декабрь.2014 13:13:38
#15
Ето пейдж обжекти или просто цепочний поиск елементов ?
вы не подкажите наглядные примеры как хранить драйвер?
@ArtOfLife в одной из недавних тем рассказывал, как лучше строить хранение.
Сергей, не подскажешь , где?
ArtOfLife
(Sergey Korol)
04.Декабрь.2014 13:26:24
#19
Подскажу, час назад в текущей теме линк мелькал же
Более обобщенно из недавних только эта тема была.
Taras
(Taras)
04.Декабрь.2014 13:55:33
#20
в цепочних методах пейдж обджекта (тоесть если результатом перехода метода есть инстанс другого пейдж обджекта, например loginToHomePage() возвразает HomePage) Вам нужно на return new HomePage лупить, ну или PageFactory.initElements если Ви его используете. Я вижу с кода что Ви так и делаете, по етому думаю у вас просто webdriver неправально засетан. Как правило webdriver возвращаеться singleton фабрикой, ну конечно если у вас не grid тести