Невозможно выбрать строку в объекте списка / таблицы для тестирования приложения для настольного компьютера с использованием Winium для Python - PullRequest
0 голосов
/ 24 апреля 2019

Я использую Winium с Python для автоматизации настольного приложения и столкнулся с частью моего графического интерфейса, у меня возникли проблемы с автоматизацией.

В процессе создания конфигурации у пользователя будет окногде они выбирают тип создаваемого протокола.

enter image description here

Проблема, с которой я сталкиваюсь, заключается в выборе определенной строки в таблице с помощью щелчка мыши.Поскольку существует несколько строк с одним и тем же именем протокола, я хочу выбрать строку на основе имени протокола и режима (т. Е. Ведомого устройства Modbus).

В идеале я хотел бы найти таблицу, найти нужную строку на основе протокола и режима и выбрать эту строку.Я выяснил, как выбрать строку, используя только имя протокола:

driver.find_element_by_class_name("WindowsForms10.SysListView32.app.0.141b42a_r9_ad1").find_element_by_id("LargeIncrement").click()
driver.find_element_by_class_name("WindowsForms10.SysListView32.app.0.141b42a_r9_ad1").find_element_by_name("Modbus").click()

Проблема, с которой я столкнулся, заключается в том, чтобы найти способ выбрать строку на основе обоих параметров.При тестировании веб-интерфейса это обычно объект '/ td' или '/ tr', и я легко могу найти список / таблицу в HTML-коде и использовать его XPath для указания строки или ячейки в строке.Это не относится к моему настольному приложению.Я пытался использовать оба Осмотреть объект (версия 7.2.0.0) ...

enter image description here

... и UISpy (версия 3.0.0.0) ...

enter image description here enter image description here

... ноне удалось выяснить, как выполнить это действие.Проведя некоторые исследования и поиски, я попробовал комбинацию из следующего:

driver.find_element_by_class_name("WindowsForms10.SysListView32.app.0.141b42a_r9_ad1").find_elements(By.NAME)
driver.find_element_by_class_name("WindowsForms10.SysListView32.app.0.141b42a_r9_ad1").find_elements(By.ID, "item")
driver.find_element_by_class_name("WindowsForms10.SysListView32.app.0.141b42a_r9_ad1")[5]

Я провел некоторое копание элементов и смог показать, что существует 182 объекта Xpath.

protocol_table = driver.find_element_by_class_name("WindowsForms10.SysListView32.app.0.141b42a_r9_ad1")

all_xpath_children = protocol_table.find_elements_by_xpath(".//*")
print "Length:" + str(len(all_xpath_children))

Я уверен, что есть способ достичь этого, но я изо всех сил пытаюсь понять это.Я нашел очень мало документации, и большая часть помощи, которую я нашел, была строго для Java.

Обновление (1) 4/24/2019 Я также смотрел наэлементы в списке отдельно, в надежде найти способ выполнить это действие.Вот информация об одном из этих пунктов в списке / таблице:

Проверка объекта - Ведомый Modbus enter image description here enter image description here enter image description here enter image description here

UISpy - Modbus Slave enter image description here enter image description here enter image description here enter image description here

Обновление (2) 4/24/2019 Я нашел кое-что, что работает несколько.Я заметил на скриншотах выше для Inspect и UISpy, когда щелкнул один элемент, присутствующий в таблице, он показал, что LocalizedControlType был равен 'text'.Поэтому я начал тестировать различные возможности, используя этот параметр, и успех, который я имел с XPath выше.Я обнаружил, что все 3 опции, приведенные ниже, способны выбирать подчиненную линию Modbus в таблице:

driver.find_element_by_class_name("WindowsForms10.SysListView32.app.0.141b42a_r9_ad1").find_element_by_xpath("(//*[@LocalizedControlType='text'])[79]").click()
driver.find_element_by_class_name("WindowsForms10.SysListView32.app.0.141b42a_r9_ad1").find_element_by_xpath("(//*[@LocalizedControlType='text'])[80]").click()
driver.find_element_by_class_name("WindowsForms10.SysListView32.app.0.141b42a_r9_ad1").find_element_by_xpath("(//*[@LocalizedControlType='text'])[81]").click()

Выбор объекта 78 приводит к выбору мастера Modbus, а выбор объекта 82 приводит к выбору следующей строки вниз.Этот метод будет работать, но было бы неплохо найти более чистый способ выбора строки, зная оба «протокол» и «режим».

...