Интеграция Selenide + ExtJS6.5 (ComponentQuery). Стоит ли замарачиваться?

Cтоит вопрос стрессоутойчисвости CSS/XPath для ExtJS6.5. Дев команда порекомендовала использовать аппроач с Ext.ComponentQuery и уверяет что в таком случае, тест автомейшн команде не страшны ExtJS апгрейды и др. ченжи. Собствeнно пытаюсь сделать PoC c преваращением Ext.ComponentQuery в SelenideElement.

Я попытался сделать:

Selenide.executeJavaScript(“Ext.ComponentQuery.query("component")”), в итоге result = null и консоль поднятого браузера молчит.

UPD: Смог вытянуть Id элемента

(String)Selenide.executeJavaScript(“return Ext.ComponentQuery.query("titletools[text=‘Tools’]")[0].id”)

В случае :

Selenide.executeJavaScript(“Ext.ComponentManager.each(function (id, item){console.log(id, item.initialConfig)})”)
в консоле получаю спсисок елементов, но елементы не передаются в Selenide.

Пытался подсмотреть решение здесь: socrates15-selenide/src/test/java/so/cra/tes/selenide/extjs/ext at master · mmichaelis/socrates15-selenide · GitHub

Но не выходит передать объект в Selenide.

Порекомендуйте, что в таком случае можно сделать?

1 лайк
2 лайка

Метод $ перегружен, и позволяет передавать разные типы внутрь

$(By.componentQuery('blabla'))
1 лайк

@xotabu4 , спасибо за идею! Постараюсь попробовать. Отпишусь о результатах.

Вы забыли “return”:

2 лайка

Да, изначально таки забыл. В UPD уже исправился.
Первая победа есть в том, что сделав Override методов селениум класса By удалось создать кастомный локатор, который возвращает WebElement, а Selenide охотно подхватывает его в $/$$.
Хитрость состоит в том, что у Extjs.ComponentQuery мы должны спрашивать не просто объект, а его референс на dom. Extjs.ComponentQuery локатор должен выглядить приблизительно так “blablabla.el.dom”.
Как только удастся сделать все красиво, поделюсь решением или спрошу еще вопросы.