Есть ли способ получить информацию из элемента пользовательского интерфейса, который имеет свойство IsControlElement = False? (Python + Appium + WinAppDriver) - PullRequest
1 голос
/ 09 января 2020

Приветствия и приветствия!

Я работаю над проектом автоматизации пользовательского интерфейса для настольного приложения windows (FrameworkId: Win32) Стек: Python (3.7) + Appium (1.15.1) + WinAppDriver (v1.1).

Я определил элемент с помощью Inspect.exe, но при попытке кодирования, что бы я ни делал, я получаю эту ошибку: selenium.common.exceptions.NoSuchElementException: Message : Элемент не может быть расположен на странице с использованием заданных параметров поиска.

Используемая мной стратегия локатора: xpath: self.driver.find_element_by_xpath("//*[@LocalizedControlType='text' and @IsControlElement='false']")

Как видите, Inspect .exe показал, что он обладает свойством "IsControlElement='false'", но я не могу на всю жизнь "получить доступ" к нему через код.

Я также хотел бы отметить, что любые элементы, имеющие IsControlElement='true' правильно найдены, и я могу "взаимодействовать" с ними.

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 15 января 2020

Источник проблемы

Это , вероятно проблема в реализации Microsoft UI Automation в. NET. Свойство IsControlElement должно было возвращаться true, тогда как оно не было.

Судя по моим тестам, это похоже на проблему где-то в пределах UIAutomationCore.dll.

Я размышляю причина root заключается в том, что реализация автоматизации была предназначена для обеспечения доступности, и они по ошибке проигнорировали некоторые элементы управления, которые НЕ читаются (Image, Geometry, et c.).

Обходной путь для некоторых случаев

  • Попробуйте использовать элемент управления пользовательского интерфейса для типа с текстом.
  • , если это уже текстовый элемент управления, попробуйте использовать другой текстовый тип управления. например - в WPF проекте - используйте Label вместо TextBlock
  • , если это НЕ текстовый элемент, если возможно, оберните элемент управления в текстовый элемент. в WPF проектах вы можете использовать <Label Padding="0"> в качестве оболочки.

Другие вопросы, которые следует учитывать

Связанные вопросы

Примечание

Поскольку вы не указали Python GUI библиотека вы используете, я не смог предоставить примеры для вашей библиотеки. К сожалению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...