Я провожу некоторое тестирование настольных приложений, используя Winium с Python.Для моего приложения я сначала подтверждаю, что в окнах отображается индикатор выполнения с другим текстом.Затем я подтверждаю, что индикатор выполнения больше не существует, прежде чем продолжить.
running_app = driver.find_element_by_name("MyApp")
status_bar = running_app.find_element_by_id("statusStrip1")
status_bar.find_element_by_class_name("WindowsForms10.msctls_progress32.app.0.141b42a_r9_ad1")
status_bar.find_element_by_name("Loading Default Files...")
# Confirm Progress Bar disappears before continuing
WebDriverWait(driver, 60).until_not(
expected_conditions.presence_of_element_located((eval("By.CLASS_NAME"), "WindowsForms10.msctls_progress32.app.0.141b42a_r9_ad1"))
)
Проблема, с которой я столкнулся, связана с той частью кода, которая предназначена для проверки того, что индикатор выполнения исчез, прежде чем продолжить.Эта конкретная строка занимает слишком много времени для выполнения.После некоторого исследования я пришел к выводу, что это происходит, потому что я могу только передать адрес компонента в «sence_of_element_located », а не его полный адрес, который будет выглядеть примерно так ...
driver.find_element_by_name("MyApp").find_element_by_id("statusStrip1").find_element_by_class_name("WindowsForms10.msctls_progress32.app.0.141b42a_r9_ad1")
К сожалению,У меня нет способа разбить это на XPath и использовать вместо этого.Насколько я знаю, я не знаю способа получения XPath объекта, используя этот адрес.Я хотел бы найти способ сделать либо .. (1) Вставить этот абсолютный / полный адрес в Ожидаемые_условия.presence_of_element_located (), либо найти альтернативный способ подтвердить, что объект больше не существует.
- ОБНОВЛЕНИЕ 20190502 -
Пока что самое близкое решение, которое я нашел, - это объединить идеи, приведенные ниже:
WebDriverWait(driver, 15).until(
expected_conditions.invisibility_of_element_located((eval("By.XPATH"), "//*[@name='MyApp']//*[@id='statusStrip1']//*[@class='WindowsForms10.msctls_progress32.app.0.141b42a_r9_ad1']"))
)
Это действительно помогает мне пройти проверку индикатора выполнения.исчез, поэтому тест можно продолжить.Он также имеет ту же проблему синхронизации, что и подстановочные знаки, означающие, что объект должен быть найден первым.
- 20190502 ОБНОВЛЕНИЕ (2) -
Итак, у меня былнемного прорыва, чтобы выяснить эту загадку.Для использования XPath, если я проводил тестирование веб-интерфейса, я могу посмотреть на код XML и увидеть, что это «// div», «// table», «// input», «// tspn» и т. Д.Я использовал инструмент UISpy, чтобы выяснить имена объектов в моем настольном приложении.Когда я смотрел на него, мне стало интересно, какие надписи находятся перед объектом, на который он ссылается.
![enter image description here](https://i.stack.imgur.com/8PCgs.jpg)
В контрольном виде я вижу 'MyApp "имеет ярлык" Окно "рядом с ним.Поэтому я решил использовать это, чтобы изменить мою попытку XPath следующим образом:
WebDriverWait(driver, 15).until(
expected_conditions.invisibility_of_element_located((eval("By.XPATH"), "//window[@name='MyApp']//*[@id='statusStrip1']//*[@class='WindowsForms10.msctls_progress32.app.0.141b42a_r9_ad1']"))
)
Мало того, что это работало, но это было немного быстрее, чем предыдущие попытки.Проблема в том, что следующий слой помечен как «Строка состояния», и я не совсем уверен, как представить это в XPath.