Element MyElement is not clickable at point (x, y)... Other element would receive the click
Элемент myElement недоступен для клика в точке (x, y)... Другой элемент получит щелчок
Я пытаюсь выполнить несколько тестов, используя Katalon Studio на основе Selenium. В одном из моих тестов мне приходится писать внутри текстовой области. Проблема в том, что я получаю следующую ошибку:
...Element MyElement is not clickable at point(x, y)... Other element would receive the click...
На самом деле мой элемент находится внутри какого-то другого diva, который может его скрыть, но как я могу заставить событие click попасть в мою текстовую область?
Переведено автоматически
Ответ 1
Element ... is not clickable at point (x, y). Other element would receive the click" может быть вызвано различными факторами. Вы можете устранить их с помощью любой из следующих процедур:
Элемент не щелкается из-за присутствия вызовов JavaScript или AJAX
Попробуйте использовать JavascriptExecutor, чтобы переместить элемент в область просмотра:
JavascriptExecutorjse1= (JavascriptExecutor)driver; jse1.executeScript("scroll(250, 0)"); // if the element is on top. jse1.executeScript("scroll(0, 250)"); // if the element is at bottom.
Я полагаю, вы уже проверили, что здесь не перекрывается какой-либо другой компонент (прозрачная реклама-iframes или какой-либо другой компонент DOM => довольно часто видели такие вещи в элементах ввода / текстового поля) и, когда вручную (медленно) пошагово ваш код работает без сбоев, тогда вызовы ajax могут вызвать такое поведение.
Чтобы избежать thread.sleep, попробуйте использовать EventFiringWebDriver и зарегистрировать для него дескриптор. (В зависимости от технического уровня вашего приложения, вы можете использовать его для Angular, jQuery или wicket в обработчике, что требует разных реализаций) (Кстати: этот подход также много раз помогал мне избавиться от "StaleElementException")
Как сказал @DebanjanB, ваша кнопка (или другой элемент) может быть временно закрыта другим элементом, но вы можете подождать и щелкнуть по ней, даже если вы не знаете, какой элемент закрывает кнопку. Для этого вы можете определить свое собственное ожидаемое условие с помощью действия click:
На самом деле это не особенность Selenium WebDriver, хотя это обычная функция в большинстве языков программирования. Но все это не имеет значения.
Нитки.Sleep() делает именно то, что вы думаете, он переводит поток в спящий режим. Итак, когда ваша программа запускается, в большинстве ваших случаев в этой программе будут какие-то автоматические проверки, они выполняются в потоке. Итак, когда мы вызываем Thread.Sleep мы инструктируем нашу программу абсолютно ничего не делать в течение определенного периода времени, просто спать. Не имеет значения, что делает наше тестируемое приложение, нам все равно, нашим проверкам пора спать!
Удручающе, однако довольно часто можно увидеть несколько экземпляров Thread .Sleep() в фреймворках проверки графического интерфейса Selenium WebDriver. Что обычно происходит, так это сбой скрипта или спорадический сбой, и кто-то запускает его локально и понимает, что идет гонка, которую иногда WedDriver проигрывает. Возможно, загрузка приложения иногда занимает больше времени, возможно, когда у него больше данных, поэтому, чтобы исправить это, они просят WebDriver вздремнуть, чтобы убедиться, что приложение загружено до продолжения проверки.
Thread.sleep(5000);
Указанное значение указано в миллисекундах, поэтому этот код приостановит проверку на 5 секунд.