Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Кто использовал библиотеку atlassian-selenium?


(Александр Таранков) #1

Всем привет!

Наткнулся тут случайно на интересную разработку небезызвестной компании Atlassian (Jira, Confluence, etc) - библиотеку atlassian-selenium

Ссылка - https://ecosystem.atlassian.net/wiki/display/SELENIUM/Home

Что она из себя представляет:

  • использование по лицензии BSD
  • продвинутая надстройка над стандартными компонентами WebDriver, позволяющая работать с современными WebUI. Чем-то похож на Selenide как я понял. @asolntsev, можешь сравнить? Не ради “померяться”, а как взгляд на конкурирующий продукт.

Например, PageElements - это продвинутый WebElement

// inject PageElement by ID
@ElementBy(id = "someid")
protected PageElement someElement;
 
// inject an element with custom timeout
@ElementBy(id = "someid", timeoutType=TimeoutType.DIALOG_LOAD)
protected PageElement dialogContainer;
 
 
// inject an element that is within some ancestor
@ElementBy(id = "ancestor")
protected PageElement ancestor;
 
@ElementBy(className = "child-class", within="ancestor") // use field name to refer to the ancestor element
protected PageElement nested;
 
 
// find multiple elements inside some ancestor element (useful e.g. for tables)
@ElementBy(id = "thetable")
protected PageElement table;
 
@ElementBy(tagName = "tr", within="table")
protected Iterable<PageElement> rows;

Что интересно к PageElement можно обращаться даже если его нет в DOM, и проверить это с помощью IsPresent(), не обрабатывая дополнительно исключения
Для этого PageElement умеет возвращать TimedCondition, которого можно ожидать с помощью Poller, например, вот так

// in page object...
// (TimedCondition is basically same as TimedQuery<Boolean>)
 
public class SomeDialog
{
    @ElementBy(id = "some-dialog")
    protected PageElement container;
 
    public TimedCondition isOpen()
    {
        return container.timed().hasClass("aui-dialog-content-ready");
    }
     
}
 
// in test...
 
@Test
public void thatPageShouldOpenSomeDialog()
{
    final ThatPage thatPage = myProduct.goToPage(ThatPage.class);
    final SomeDialog someDialog = thatPage.openSomeDialog();
    Poller.waitUntilTrue("Expected some dialog to open but it didn't", someDialog.isOpen()); // this waits by default 5 seconds for the dialog to open, the error message is optional
}

Не сказать, что либа - свежак, даже судя по документации ей как минимум 2 года. Но раньше я как-то про неё не слышал.

Сам ещё не пробовал, но описание воодушевляет. Если кто-то использовал, пожалуйста отпишитесь о впечатлениях.


(Mykhailo Poliarush) #2

Нет, такую библиотеку не использовал, но спасибо за находку добавил в


(Sergey Korol) #3

На первый взгляд, судя по сорсам, ребята создали фреймворк чисто под себя. Слишком уж он перегружен. Был замечен микс технической и доменной части. Слабо прослеживается выбранный архитектурный подход. Хранить Selenium 1 сорсы - вообще нонсенс. Есть несколько идей, которые интересны чисто с технической точки зрения. Но тот же Selenide гораздо более прост в чтении и понимании.


(asolntsev) #4

Согласен с @ArtOfLife
Отдельные вещи вроде действительно похоже на Selenide, но кода, на первый взгляд, приходится писать больше. Подробнее не исследовал.