Перейти к содержимому

Фотография

Объясните пожалуйста принцип работы @FindBy для Select

@FindBy Select

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 Deformator

Deformator

    Новый участник

  • Members
  • Pip
  • 10 сообщений

Отправлено 25 августа 2014 - 11:47

Столкнулся с такой проблемой. Постоянно выхватываю NullPointerException если использую такую интерпретацию:

@FindBy (xpath = "//*[@id=\"ddlProjectLabel\"]") private Select workTypeSelect;

в методе указываю 

 workTypeSelect.selectByVisibleText("Design"); 

Если же пишу

@FindBy private Select workTypeSelect;

и в методе

workTypeSelect = new Select(driver.findElement(By.xpath("//*[@id=\"ddlProjectLabel\"]")));
workTypeSelect.selectByVisibleText("Design"); 

то все отлично отрабатывает.
Объясните пожалуйста нубу, что не так? Ведь на всех форумах почему-то указан именно 1-й вариант, он конечно и более удобный.
 
http://internetka.in...fielddecorator/
http://habrahabr.ru/...ex/blog/158787/
 
PS: c полями для ввода, кнопками и т.д. все отлично работает. Я бы не задавал вопрос, с учетом того, что для селекта в отличии от элементов нужно создавать экземпляр класса, но почему на всех форумах пишут про 1-й вариант и почему же он не работает у меня. Заранее спасибо.


  • 0

- Ты программист?

- Нет, я тестировщик.

- А кто это?


#2 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 25 августа 2014 - 12:02

Надеюсь, Вы обратили внимание на то, что в первой статье использовался самодельный декоратор полей, а во второй статье Select -- это совсем другой класс, свой собственный, а не включённый в стандартный дистрибутив Selenium? (впрочем, и декоратор там тоже нестандартный :) )


  • 1
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#3 Deformator

Deformator

    Новый участник

  • Members
  • Pip
  • 10 сообщений

Отправлено 25 августа 2014 - 12:20

Большое спасибо за ответ. Не обратил конечно, спешил, выхватил кусок кода и зашел в тупик. Еще раз спасибо.


  • 0

- Ты программист?

- Нет, я тестировщик.

- А кто это?


#4 Deformator

Deformator

    Новый участник

  • Members
  • Pip
  • 10 сообщений

Отправлено 25 августа 2014 - 13:23

Решил конечно через одно место проблему, но код сократил. Дописал в классе метод

 

//метод для возврата экземпляров класса для селектов
    private Select getPageSelectElement(WebElement select){
        return new Select(select);
    }

Может есть, что-то оптимальней?


  • 0

- Ты программист?

- Нет, я тестировщик.

- А кто это?


#5 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 25 августа 2014 - 14:06

а просто создать метод  selectByVisibleText нет  ?  :)

private Select getPageSelectElement

и почему он приватный ?


  • 0

#6 wret

wret

    Активный участник

  • Members
  • PipPip
  • 124 сообщений
  • Город:Москва

Отправлено 25 августа 2014 - 16:30

Решил конечно через одно место проблему, но код сократил. Дописал в классе метод

 

//метод для возврата экземпляров класса для селектов
    private Select getPageSelectElement(WebElement select){
        return new Select(select);
    }

Может есть, что-то оптимальней?

Не делайте так

Человек, который будет читать код после вас, будет совсем не рад

Создание экземпляров классов стандартное, его и придерживайтесь


  • 0

#7 asolntsev

asolntsev

    Новый участник

  • Members
  • Pip
  • 64 сообщений
  • ФИО:Андрей Солнцев
  • Город:Таллинн

Отправлено 25 августа 2014 - 21:35

Попробуйте библиотеку Selenide.

С ней всё получается гораздо проще и короче:

 


  • 0

#8 mazik7

mazik7

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мазик
  • Город:Красноярск

Отправлено 26 августа 2014 - 01:10

 

Попробуйте библиотеку Selenide.

С ней всё получается гораздо проще и короче:

 

 

Как по мне - сначала лучше разобраться с WebDriver, и только потом уже переходить на что-то подобное)


  • 0

:smile:


#9 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 26 августа 2014 - 09:02

Selenide не решает проблему разделения структуры страниц (page objects) и кода.

 

Если уж что советовать -- так это HtmlElements, который упоминался топикстартером, ссылка на вторую статью.


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#10 Deformator

Deformator

    Новый участник

  • Members
  • Pip
  • 10 сообщений

Отправлено 02 сентября 2014 - 11:27

Спасибо за советы  :smile:


  • 0

- Ты программист?

- Нет, я тестировщик.

- А кто это?


#11 asolntsev

asolntsev

    Новый участник

  • Members
  • Pip
  • 64 сообщений
  • ФИО:Андрей Солнцев
  • Город:Таллинн

Отправлено 21 октября 2014 - 11:34

Selenide не решает проблему разделения структуры страниц (page objects) и кода.

 

Если уж что советовать -- так это HtmlElements, который упоминался топикстартером, ссылка на вторую статью.

 

Selenide очень даже решает и эту проблему, причём максимально гибко.

 

http://ru.selenide.o...ge-objects.html


  • 0

#12 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 871 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 21 октября 2014 - 11:54

Давайте будем честны, в этом примере логика и локаторы как раз идут вперемешку.

 

Это немного другая вариация PageObject, где предлагается вообще скрыть элементы, а наружу предоставить только набор функций. Хорошая вариация, но -- другая.

 

Не поймите неправильно, ничего не хочу сказать плохого в адрес Selenide, как раз со своими задачами он отлично справляется. Но не стоит приписывать ему магические свойства :)


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium



Темы с аналогичным тегами @FindBy, Select

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных