Добрый день.
Подскажите, пожалуйста, как справиться с такой проблемой:
пытаюсь кликнуть на кнопку (селектор верно указан), но клик происходит не по кнопке, а по другому элементу (по loader); как сделать так, чтобы клик по кнопке происходил уже после того, как этот лоадер прогрузится.
Пытаюсь использовать явные ожидания, но ничего не выходит, в результате чего приходится мешать их со sleep, что в корне не правильно, да и срабатывает не всегда.
Заранее благодарю откликнувшихся.
Да без обид, конечно. Я начинаю только.
Это так получается, если сначала в билдере действия записать, а потом экспорт сделать в python.
Если можете, поделиться - как будет правильнее - спасибо.
Достаточно ли этого?
Спасибо большое.
Именно к этой кнопке пробовала обратиться по XPATH, результат был аналогичный. Попробую сейчас еще раз, возможно, что-то не учла.
Могу ли попросить совет: с точки зрения явных ожиданий - все ли использовано верно?
Синтаксически ожидание выглядит правильно. Но так как в целом весь код представляет собой жуткую мешанину, то разбираться в нем трудно. Попробуйте определить локаторы в отдельном месте и не переназначать переменную element. Чтобы получилось что-то типа:
То есть приучайте себя к тому, что определение драйвера должно быть в одном месте, представление о странице - в другом, а логика собственно теста - в третьем. Потом будете разносить это по разным модулям и классам. Почитайте про паттерн проектирования Page Object.
У элемента “лоадер” есть какой-то атрибут обычно, или не у него - который изменяется в течении времени.
Можно подождать, пока элемент с таким атрибутом будет в наличии, указав к нему путь по XPath, например.
После изменения атрибута - старый локатор уже будет невалидный, элемент не будет найден на странице, и после этого уже спокойно кликайте на нужный элемент.
Тобишь вейт должен ожидать изменения элемента по сути(или появления элемента с нужным локатором).
У нас в проекте была похожая ситуация: во время работы javascript’а с сервером приложений появлялся некий визуальный элемент загрузки, говорящий о том, что стоит подождать, пока все запросы выполнятся и только после этого уже разрешается работать со страницей. Причем этот элемент мог появиться и исчезнуть несколько раз в течении в 1 - 3 секунд.
В коде мы выразили это так:
Таким образом мы сначала ждем 1 секунду пока появится элемент загрузки, а потом ждем пока он исчезнет. И только после этого уже работаем со страницей (нажимаем по кнопкам, вводим данные и т.п.).