На Mac Katalon Studio невозможно нажать кнопку, вместо этого нужно щелкнуть родительский тег HTML
У меня есть команда нажатия кнопки в Katalon Studio, где я использую scrollIntoView, чтобы отобразить кнопку, а затем нажимаю кнопку.
((JavascriptExecutor) functiondriver).executeScript("arguments[0].scrollIntoView({block: \"nearest\"});", buttonelement);
WebUI.delay(4)
WebUI.click(findTestObject('object/path'))
Используя Chrome при выполнении, код прекрасно работает на компьютере Windows, но затем на компьютере Mac я получаю следующую ошибку примерно в 40% случаев:
Unable to click on object '/object/path/' (Root cause: org.openqa.selenium.WebDriverException: unknown error: Element <button class="classname">...</button> is not clickable at point (750, 548). Other element would receive the click: <html lang="en">...</html>
Я искал в Интернете решения и попытался решить эту проблему, добавив задержку, которую вы видите выше, но это не сработало. Кроме того, глядя на браузер, когда автоматизация работала, я могу визуально увидеть кнопку, которая должна быть нажата, - значит, кнопка не загружается. Есть ли другой способ, которым я могу написать этот код, чтобы он работал более последовательно?
Обновление: я попробовал более интеллектуальную функцию ожидания, предложенную как в этом ответе, так и в связанном вопросе, но ни одна из них не сработала. Я хотел бы подчеркнуть, что эта проблема возникает только на компьютерах Mac, а не Windows; это то, что отличает эту проблему от других подобных вопросов.
Я сделал открытие. При запуске сценария через Katalon Studio Chrome по умолчанию не увеличивает окно. Тем не менее, я провел эксперимент, в котором заставил браузер развернуться, и это решило проблему. Таким образом, кажется, что Katalon Studio испытывает проблемы с установкой координат x,y на Mac, когда браузер не работает в полноэкранном режиме. Это какая-то проблема калибровки с моей установкой или известное поведение с WebUI на компьютерах Mac?
2 ответа
Я наконец нашел проблему. Маки добавляют полосу прокрутки, которая наводит курсор на содержимое страницы. Он невидим, если вы не наведете курсор на него, чтобы использовать его. В моем случае, я использовал "ближайший" при использовании прокрутки в представлении, что иногда (но не всегда) приводит к тому, что кнопка находится в самом низу страницы. В этом случае горизонтальная полоса прокрутки находится над кнопкой. Вот почему проблема исчезла, когда я развернул окно, и почему проблема не возникает на компьютерах с Windows. Я решил эту проблему, изменив мой скрипт scrollIntoView на:
scrollIntoView({block: \"center\"}
Задержка - большая часть автоматизации, иногда кажется, что кнопка есть, но в тот момент, когда с ней нужно было взаимодействовать, она может быть еще не готова. Этот таймфрейм обычно очень мал и слишком быстр, чтобы увидеть его глазами.
В WebUI есть ряд помощников для выполнения динамических ожиданий, которые ожидают, что элемент удовлетворяет некоторым критериям, вместо того, чтобы просто ждать X секунд.
Instead of WebUI.delay(4)
Вы можете попробовать что-то вроде:
WebUI.waitForElementClickable(findTestObject('object/path'))
Если проблема действительно в том, что он пытается взаимодействовать слишком быстро, прежде чем страница будет готова позволить вам нажать кнопку, то это приведет к задержке, которая длится ровно до тех пор, пока Selenium не определит, что кнопка находится в состоянии, которое позволит вам нажать Это.