Добрый день.Пытаемся написать автотесты для desktop приложения (само приложение написано на Qt5 и C++)
В качестве инструмента выбрали #winium .
Проблема заключается,в том что в тестируемом приложении появляются окна (с кнопками и др. элементами)
У окон и кнопок есть свои Name, но #winium почему-то не находит их как элементы.
# Находим главное окно приложения и нажимаем кнопку 'Создать' в этом окне
MainWindow = driver.find_element_by_name('LeoMainWindow')
MainWindow.find_element_by_name('Создать').click() #кнопка успешно нажалась и появилось окно с name 'Создать Рейс'
#пытаемся переключится в это окно
MainWindow2 = driver.find_element_by_name('LeoMainWindow')
WindowCreateFlight = MainWindow2.find_element_by_name('Создать Рейс') # возникает ошибка,что элемент не найден
Нет.Изначально так и пытался…Потом уже стал искать от нового драйвера,но безрезультатно… Может в Виниуме нужно как-то по особому переключаться в окна (типа как с frame,когда тестируем веб) ?
Traceback (most recent call last):
File "C:/PyCharm/calc/test.py", line 26, in <module>
WindowCreateFlight = MainWindow2.find_element_by_name('Создать Рейс') # возникает ошибка,что элемент не найден
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 154, in find_element_by_name
return self.find_element(by=By.NAME, value=name)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 478, in find_element
{"using": by, "value": value})['value']
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 461, in _execute
return self._parent.execute(command, params)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Element cannot be found
В том то и вопрос(мой первый комментарий) поддерживает ли Wimum это или нет,или есть какой-то другой способ?
Если использовать как: ff = driver.switch_to.frame('Создать Рейс')
То идет ошибка: selenium.common.exceptions.WebDriverException: Message: 'switchToFrame' is not valid or implemented command.
Yurij_Litvin: “а если попробовать найти child “Создать рейс”? Например MainWidget”
не находит.
Также дополнительно пробовал искать в SchedulesPane (SchedulesPane находится успешно), но ни ‘Создать Рейс’ ни его дочерний элемент MainWidget’ не находятся
MainWindow = driver.find_element_by_name('LeoMainWindow')
MainWindow.find_element_by_name('Создать').click() #кнопка успешно нажалась и появилось окно с name 'Создать Рейс'
time.sleep(10)
MainWindow2 = driver.find_element_by_name('LeoMainWindow')
SchedulesPane = MainWindow2.find_element_by_name('SchedulesPane')
CreateFlight = SchedulesPane.find_element_by_name('Создать Рейс')
и
MainWindow = driver.find_element_by_name('LeoMainWindow')
MainWindow.find_element_by_name('Создать').click() #кнопка успешно нажалась и появилось окно с name 'Создать Рейс'
time.sleep(10)
MainWindow2 = driver.find_element_by_name('LeoMainWindow')
SchedulesPane = MainWindow2.find_element_by_name('SchedulesPane')
CreateFlight = SchedulesPane.find_element_by_name('MainWidget')
Тут может быть проблема из-за пробела в “Создать Рейс”.
Если есть доступ к исходному коду, попробуйте переименовать название окна - “СоздатьРейс”.
Если после этого заработает, значит нужно разбираться с кодировкой.
Еще попробовал искать через driver.switch_to.window(handle) , где handle - ищутся командами: driver.current_window_handle - активный или driver.window_handles - все . Но тут возникло 2 сложности:1) Командой driver.window_handles - Winium находит все handles программ открытых на компьютере (это не так страшно,т.к. можно избавиться потом от лишних методом исключения) .Но вот это уже не позволяет использовать driver.switch_to.window(handle) - 2) Независимо от того,сколько вкладок и окон открыто внутри тестируемой программы,именно для неё driver.window_handles будет всегда находить только 1 handle