t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

Теги: #<Tag:0x00007f9b03547ec8> #<Tag:0x00007f9b03547ba8> #<Tag:0x00007f9b035478d8>

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.

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

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

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

1 Симпатия
2 Симпатий

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

http://selenide.org/javadoc/current/com/codeborne/selenide/Selenide.html#Z:Z:D-org.openqa.selenium.By-

$(By.componentQuery('blabla'))
1 Симпатия

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

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

2 Симпатий

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