Size: a a a

Selenide на русском

2018 September 22

LY

Lev Yarushin in Selenide на русском
Я про "локаторы объявлять стрингами". В Atlas как раз параметры внутри локаторов. Как я понял именно это хотелось получить
источник

SR

Stas Rusakov in Selenide на русском
public class Example {


   private SelenideElement mainDiv = $(By.id("main_div"));
   private SelenideElement mainDivAnother = $(By.id("main_div_another"));
   private By saveButton = By.id("save button");
   private By saveButton2 = By.id("save button2");

   private SelenideElement currentElement;

   public Example() {
       super();
   }

   public Step getMainDiv() {
       currentElement = mainDiv;
       return new Step();
   }

   public Step2 getAnotherMainDiv(){
       currentElement = mainDivAnother;
       return new Step2();
   }

   class Step{
       public SelenideElement saveButton(){
           return currentElement.$(saveButton);
       }

   }

   class Step2{
       public SelenideElement saveButton2(){
           return currentElement.$(saveButton2);
       }

   }
}


Я имелл ввиду что то в духе такого)
источник

AV

Alexei Vinogradov in Selenide на русском
Stas Rusakov
Ну задать в коде логику перехода по страницам. А так же последовательность допустимых действий. И как вариант можно организовать так же логику «сборки» элемента. Насколько я понял именно последнее  хочет сделать Станислав.
ну просто "переход по страницам" - в тех веб-аппах, которые в конце 90-ых писали это хорошо ложится. А сейчас даже сами "страницы" чаще не имеют чётких границ. Современный фронтэнды обычно состоят из небоольших визуальных компонент, которые рендерятся и взаимодействуют друг с другом, но не в рамках "страницы", а  просто на видимой части экрана.
источник

AV

Alexei Vinogradov in Selenide на русском
Например проверьте: Angular, EmberJS, React - там есть понятие  web page?
источник

SR

Stas Rusakov in Selenide на русском
Stas Rusakov
public class Example {


   private SelenideElement mainDiv = $(By.id("main_div"));
   private SelenideElement mainDivAnother = $(By.id("main_div_another"));
   private By saveButton = By.id("save button");
   private By saveButton2 = By.id("save button2");

   private SelenideElement currentElement;

   public Example() {
       super();
   }

   public Step getMainDiv() {
       currentElement = mainDiv;
       return new Step();
   }

   public Step2 getAnotherMainDiv(){
       currentElement = mainDivAnother;
       return new Step2();
   }

   class Step{
       public SelenideElement saveButton(){
           return currentElement.$(saveButton);
       }

   }

   class Step2{
       public SelenideElement saveButton2(){
           return currentElement.$(saveButton2);
       }

   }
}


Я имелл ввиду что то в духе такого)
Забросайте меня камнями, но такой код мне напоминает билдер)
Но я полностью согласен что билдером это не называется.
источник

AV

Alexei Vinogradov in Selenide на русском
Билдер испоользуют для создания ообъектов, с большим количеством неообязательных полей, как альтернативу 100500 различным конструкторам
источник

AS

Andrei Solntsev in Selenide на русском
@StasRusakov Я понимаю, что ты хочешь, но это не так надо делать
источник

AS

Andrei Solntsev in Selenide на русском
Чтобы был переход между страницами, надо сделать две разные страницы.
public class Page1
public class Page2
источник

AS

Andrei Solntsev in Selenide на русском
И чтобы метод, скажем, login объекта Page1 возвращает инстанс Page2.
источник

SR

Stas Rusakov in Selenide на русском
Andrei Solntsev
@StasRusakov Я понимаю, что ты хочешь, но это не так надо делать
Когда увидел ваш код - понял что хотел Станислав) Да, ваше решение - это то что просилось изначально)
Я просто подумал про такую штуку)
В контексте именно построения элементов) а не страниц)
источник

AS

Andrei Solntsev in Selenide на русском
А чтобы они использовали общие элементы, они могут без проблем наследоваться от одного класса, или реализовывать один интерфейс - тут уж как угодно.
источник

SR

Stas Rusakov in Selenide на русском
Нет, нет)) Боюсь меня неправильно поняли)
Я знаю что такое fluent page object)
Просто мне показалось что "похожий подход" можно распространить и на сборку элементов) Мне сначала показалось что Станислав хотел этого)
Типа есть у нас main div) В нем есть элемент 1 и элемент 2. А элемента 3 нету.
И с помощью кода который я показал - можно в коде защитить от вызова элемента 3 из блока main div)
Я только про это)
источник

SR

Stas Rusakov in Selenide на русском
Но согласен что такую защиту гораздо проще засунуть в метод page object к примеру.
Просто привел пример)
Ни на чем не настаиваю) Просто может кому то покажется интересной идея) Мне в свое время понравилась)
источник

SR

Stas Rusakov in Selenide на русском
Подредактировал что бы было виднее
источник
2018 September 26

SV

Stanislav Vasenkov in Selenide на русском
http://mvnrepository.com/artifact/io.qameta.allure/allure-selenide/2.7.0

скажите, а в чем прикол? зачем это вообще нужно?
источник

SV

Stanislav Vasenkov in Selenide на русском
типа сразу аттачим скрин и сорц?
источник

LY

Lev Yarushin in Selenide на русском
Stanislav Vasenkov
http://mvnrepository.com/artifact/io.qameta.allure/allure-selenide/2.7.0

скажите, а в чем прикол? зачем это вообще нужно?
Так там же видно кто это использует - https://github.com/Xceptance/neodymium-library
источник

A

Anton in Selenide на русском
Stanislav Vasenkov
типа сразу аттачим скрин и сорц?
Скрины и код страницы аттачим только при фейле теста, основаная фича логирование шагов selenide
источник

A

Anton in Selenide на русском
Тоже самое что TextReport в консоли в selenide, только в allure
источник

A

Anton in Selenide на русском
Stanislav Vasenkov
http://mvnrepository.com/artifact/io.qameta.allure/allure-selenide/2.7.0

скажите, а в чем прикол? зачем это вообще нужно?
источник