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

WiniumDesktop. Как получить свойство элемента ToggleState

winium
java
Теги: #<Tag:0x00007f7b704d7b58> #<Tag:0x00007f7b704d79a0>

(Yurij Litvin) #1

Есть Java приложение.
Есть чекбокс, в UI Spy его свойство:

ControlPatterns
Toggle
ToggleState: “On”

Как проверить состояние элемента?
element.getAttribute(“ToggleState”) выдает null.


#2

Используйте свойство веб-элемента is_selected()


(Yurij Litvin) #3

Спасибо огромное… Чет я пропустил этот метод :).
Еще один вопрос, если можно:
Есть ли возможность, используя Winium, найти элементы, в имени которых есть определенное значение?
Например, найти все элементы в имени которых есть “Session”.
Заранее спасибо.


#4

Да, это возможно используя поиск по XPath. Это поможет составить запрос https://github.com/2gis/Winium.Cruciatus/blob/master/src/TestApplications.Tests/WpfTestApplication.Tests/CheckFindByXPath.cs#L30


(Yurij Litvin) #5

Столкнулся с проблемой поиска по xpath элемента, который находится далеко в дереве. Поиск занимает 3-4 минуты. При этом поиск по имени, или по xpath root элемента проходит моментально… Xpath с // ищет от parent элемента или от рута? Как можно выйти из ситуации?

WebElement parent = driver.findElement(By.name("View Name"));
parent.findElement(By.xpath("//*[contains(@Name, 'Sub Child Name')]"));

Заранее спасибо.


#6

Типо нужные тебе элементы не непосредственные дети parent? Может быть *//*[… Я оч не люблю xpath, а точнее каждый раз опытным путем определяю его, так что сильнее помочь не могу :slight_smile:
В любом случае простой поиск виниума работает в глубину, а по xpath в ширину.


(Yurij Litvin) #7

Нужные элементы как раз дети (где-то 3-го порядка). Но такое ощущение, что он ищет от root. Т.к. время ±одинаковое, что от драйвера искать, что от элемента, а сам элемент очень “глубоко” от рута. Сегодня еще попробую поэкспериментировать, В любом случае спасибо.


#8

Вообщем да, я не знаю стопудово как начать xpath чтоб это означало - от текущего в самую глубину ))))
Так что когда найдется решение, отпиши сюда, это будет очень полезный опыт.


(Yurij Litvin) #9

В общем пришел к выводу, что //*[] ищет по всему драйверу даже от элемента, *[] - только первый child от драйвера или элемента. Пока воркэраунд:

WebElement parent = driver.findElement(By.name("View Name"));
parent.findElement(By.xpath("*[contains(@Name, 'ElementFirstChild Name')]//*[contains(@Name, 'FarChild Name')]"));

(Yurij Litvin) #10

Как я понял Drag and Drop еще не запилили? Планируется ли вообще в ближайшее время, очень не хватает :frowning:


#11

Извиняюсь за долгий ответ.
Для drag&drop нужно уметь перемещать мышку, зажимать и отжимать кнопку мыши. Да, первая часть то есть, а вот второй нет.
Вроде не сложно реализовать и даже открывали PR по этому поводу, но я отсутствовал и не мог посмотреть. В любом случае стоит завести на это issue :wink:


(Yurij Litvin) #12

Спасибо за ответ. Надеюсь в скором времени появится.
Пока нашел workaround - сделал метод который вытаскивает из свойства элемента координаты и возвращает rectangle, ну а его использую для Sikuli DnD…