Size: a a a

Selenide на русском

2020 May 25

AV

Alexei Vinogradov in Selenide на русском
Alexei Vinogradov
$().setValue(null)
Анонимный опрос
57%
Должно очищать поле (как сейчас)
14%
Должно просто игнорировать заполнение поля
29%
Своё мнение или нет мнения
Проголосовало: 14
История вопроса.
В PageObject довольно удобно оформлять весь форумляр отдельным классом.
Соответственно в Java (эх, в Котлине это всё гораздо проще сделать) если разные тесты не всегда заполняют все поля - то надо или оверлоудить кучу методов для заполнения,
или строить билдеры (а значит тоже  - куча методов, иногда меньшая чем в оверлоуде, но это не точно), или (я так делаю, потому что практично) - передавать для полей, которые не надо заполнять (и не надо стирать) - null,  а в PO писать конструкцию типа if (value!=null) field.setValue(value); к полям которые можно игнорировать.

Вариант "игнорировать" - позволяет просто писать field.setValue(value) во всех случаях.
источник

YA

Yuriy Artamonov in Selenide на русском
Вариант игнорировать очень злой, выльётся в часы траблшутинга на проектах
источник

AV

Alexei Vinogradov in Selenide на русском
ну теперешний вариант - тоже 🙂
источник

YA

Yuriy Artamonov in Selenide на русском
вы можете добавить default метод отдельный
источник

AV

Alexei Vinogradov in Selenide на русском
по моему представлении об ООП, setValue(null) - выглядит странно, поэтому должен кидать эксепшн 🙂
источник

YA

Yuriy Artamonov in Selenide на русском
default setValueIfPresent(valueOrNull) {if valueOrNull != null setValue(valueOrNull) }
источник

YA

Yuriy Artamonov in Selenide на русском
И новый метод можно построить на базе старого, а вот старый на новом - нет
источник

AV

Alexei Vinogradov in Selenide на русском
Alexei Vinogradov
по моему представлении об ООП, setValue(null) - выглядит странно, поэтому должен кидать эксепшн 🙂
этот вариант как раз позволит избежать долгого траблшутинга
источник

YA

Yuriy Artamonov in Selenide на русском
Блин, с вами придётся свечку ставить за backward compatibility макаронному монстру
источник

AV

Alexei Vinogradov in Selenide на русском
Yuriy Artamonov
default setValueIfPresent(valueOrNull) {if valueOrNull != null setValue(valueOrNull) }
да, этот вариант позволит по крайней мере не ломать жизнь существующие тесты разработчикам
источник

AV

Alexei Vinogradov in Selenide на русском
как раз даже именно в данной редакции - более логично решается вопрос с а что если $("element-not-found").setValue(null);

По мне довольно типичный кейс, когда в формуляре некоторые поля даже исчезают, поэтому и искать не надо, сразу игнор.
источник

AV

Alexei Vinogradov in Selenide на русском
Тесты становится правда fillPersonalData("John", null, null, "01.04.1984");  - менее читаемы в блокноте, но IntelliJ Hints же у всех включены, правда?
источник

AV

Alexei Vinogradov in Selenide на русском
Yuriy Artamonov
default setValueIfPresent(valueOrNull) {if valueOrNull != null setValue(valueOrNull) }
источник

СР

Саша Росолько... in Selenide на русском
🤔
источник

СР

Саша Росолько... in Selenide на русском
по правильному - кинуть бы эксепшн
но! селениум вроде как тоже позволяет передавать null
источник

AS

Andrei Solntsev in Selenide на русском
Мне эта идея кажется очень сомнительной.
Написать $.setValueIfPresent(foo) не проще, чем if (foo != null) $.setValue(foo).
источник

AS

Andrei Solntsev in Selenide на русском
Да, скорее уж я бы кидал ошибку в случае $.setValue(null).
источник

СР

Саша Росолько... in Selenide на русском
и, вопрос - должны ли мы в нашем случае переопределять стандартное поведение?
источник

AS

Andrei Solntsev in Selenide на русском
То, что люди городят сложные конструкции с куче null параметров - на их совести. Нам-то зачем в это соваться.
Для этого в котлине, например, есть foo?.let {  $.setValue(foo)  }
источник

СР

Саша Росолько... in Selenide на русском
отбой, про очистку значения в чистом селениуме
источник