Всем привет!
Наткнулся тут случайно на интересную разработку небезызвестной компании 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 года. Но раньше я как-то про неё не слышал.
Сам ещё не пробовал, но описание воодушевляет. Если кто-то использовал, пожалуйста отпишитесь о впечатлениях.