Перейти к содержимому

Практикум по тест-дизайну 2.0
онлайн, начало 29 ноября
Тестирование мобильных приложений
онлайн, начало 27 ноября
Автоматизатор мобильных приложений
онлайн, начало 27 ноября
Программирование на Python для тестировщиков
онлайн, начало 22 ноября
Фотография

Element is not clickable at point

python selenium error

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 Август 2017 - 14:12

Всем доброго времени суток!

 

Столкнулся с проблемой, может кто подскажет как решить?

Используется Selenium 2.53.2 и FireFox 45.3.0 ESR

 

Имеется вот такой метод выбора резистора:

 

def resistor_changing(driver, field_name, value, ok_button_id="commitdlg113"):
"""
Function change resistors parameter on resistor's dialog

:type driver: WebDriver
:type field_name: str
"""
# Unlock user overwrite
click(driver,
(By.XPATH, '//form[@id="form113"]//div/span'))
# Field to change getting
field_to_change = driver.find_element(
By.XPATH, '//form[@id="form113"]//label[contains(text(), "{name}")]/../select'.format(name=field_name))
# selecting required value
selecting_by_visible_text(driver, field_to_change, str(value))
wait_for_loading(driver)
wait_for_staleness(driver, field_to_change)
# click OK button
click(driver, (By.ID, ok_button_id))
wait_for_loading(driver)

 

field_name - это название поля из эксель файла.

value - значение, которое подставляется из эксель файла

 

Так вот, открывается диалог с резистором и по идее должен происходить клик по кнопке, для активации комбо-бокса и выбор значения.

Диалог открывается, но селениум ничего не делает и после тест падает с ошибкой:

 

selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (1178.933349609375, 826.5999755859375). Other element would receive the click: <div style="z-index: 101;" class="ui-widget-overlay ui-front"></div>

 

 

Дело еще в том, что этот метод работает в другом диалоге, с точно такими же айдишниками и резистор выбирается успешно.

 

подскажите пожалуйста, что ему нужно то? может это баг селениума или фф?


  • 0

#2 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 793 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 17 Август 2017 - 15:10

Ну написно же

Other element would receive the click

Значит другой элемент(скорее всего "крутелка") перекрывает

Тебе надо дождаться пока пропадет "крутелка", а потом уже кликать

 

http://software-test...ay/#entry161533


  • 0

#3 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 17 Август 2017 - 20:57

Ну написно же

Other element would receive the click

Значит другой элемент(скорее всего "крутелка") перекрывает

Тебе надо дождаться пока пропадет "крутелка", а потом уже кликать

 

http://software-test...ay/#entry161533

нет там никакой крутилки или загрузки, диалог подгружается быстро. И  перед выполнением этого метода wait_for_loading есть и time.sleep пробовал, без толку.

Этот же самый метод отлично отрабатывает в другом диалоге, с точно таким же действием, и там все отлично.


  • 0

#4 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 793 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 18 Август 2017 - 06:13

time.sleep сколько ?

Поставь секунд 10

Если таже ошибка, то очень странно


  • 0

#5 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений
  • ФИО:Алексей

Отправлено 18 Август 2017 - 07:37

 

Ну написно же

Other element would receive the click

Значит другой элемент(скорее всего "крутелка") перекрывает

Тебе надо дождаться пока пропадет "крутелка", а потом уже кликать

 

http://software-test...ay/#entry161533

нет там никакой крутилки или загрузки, диалог подгружается быстро. И  перед выполнением этого метода wait_for_loading есть и time.sleep пробовал, без толку.

Этот же самый метод отлично отрабатывает в другом диалоге, с точно таким же действием, и там все отлично.

 

Место то другое, а метод тот же. Посему не показатель.

 

Черным по белому написано "Other element would receive the click: <div style="z-index: 101;" class="ui-widget-overlay ui-front"></div>". Есть этот див и он перекрывает желаемый элемент (по которому хотим выполнить клик). Либо все-таки проблемы синхронизации, либо пытаемся кликнуть по элементу не в диалоге, а на самой странице, которая перекрыта этим оверлэем при открытом диалоге: в приложении открыть диалог, открыть консоль, проверить свой локатор, что находится только один элемент и он именно в диалоге.


  • 0

#6 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 18 Август 2017 - 08:40

time.sleep сколько ?

Поставь секунд 10

Если таже ошибка, то очень странно

попробовал, та же ошибка(((

 

То что пишет мне селениум, я понимаю)) Если руками открыть этот диалог, то элемент находится без проблем и он именно в активном окне, не где либо еще.


  • 0

#7 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 18 Август 2017 - 10:59

Попробовал поставить ожидание, перед выполнением клика, таким образом:

wait = WebDriverWait(driver, 10)
element = wait.until(ec.presence_of_element_located(By.XPATH, '//form[@id="form113"]//div/span')) - не подействовало.

 

после клика по кнопке "change" в предыдущем диалоге, откуда происходит переход на мой проблемный, попытался прописать вот это:

wait = WebDriverWait(driver, 10)
load = wait.until(ec.invisibility_of_element_located(By.XPATH, 'html/body/div[5]'))  - и тоже ноль изменений. Не уверен в правильности икспаса, но именно он относится к <div style="z-index: 101;" class="ui-widget-overlay ui-front"></div> тот что в ошибке.

 

Всю голову изломал, как починить это....


  • 0

#8 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 374 сообщений
  • Город:Н.Новгород

Отправлено 18 Август 2017 - 11:30

Во-первых, какой на фиг div[5]??? Искать надо по явным признакам, например, по классу ui-widget-overlay.

Во-вторых, оверлей может появляться с задержкой. То есть, сначала сработает invisibility_of_element_located, а через мгновение он появится.

Надо сначала подождать немного оверлей, и если он появился, тогда уже ждать невидимости.

На самом деле, это боль - работал с похожим приложением, и ожидание оверлея сильно замедляет тестирование. Возможно, более выгодный вариант - сделать повтор клика при возникновении именно такой ошибки - так же, как поведет себя пользователь.


  • 0

#9 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 18 Август 2017 - 12:06

А  этот оверлей физически то глазами видно? просто смотря за выполнением скрипта, я вижу как открывается нужный диалог и никаких посторонних загрузок, крутилок или окон нету. Просто тупо открыт диалог и после тест падает


  • 0

#10 Spock

Spock

    Гуру

  • Members
  • PipPipPipPipPipPip
  • 1 593 сообщений
  • ФИО:Роман

Отправлено 18 Август 2017 - 16:43

 

 

просто смотря за выполнением скрипта, я вижу как открывается нужный диалог и никаких посторонних загрузок, крутилок или окон нету. Просто тупо открыт диалог и после тест падает

тут надо понимать как работает Селениум: 

1. сначала Селениум ищет элемент

2. затем определяет его координаты

3. затем производится клик по координатам

 

иногда в процессе прорисовки страницы элемент немного "доезжает", поэтому иногда Селениум может кликать по неправильным координатам, так как сначала определил координаты а потом только кликал когда элемент "чуть съехал"

 

как это видно:

1. в тест добавляете чтобы сделал скриншот на ошибке

2. открываете скриншот в графическом редакторе и находите точку в которую пытался ткнуть Селениум. Возможно увидите что точка клика Селениума не попадает по элементу

 

тогда скорее всего поможет "скрольнуть" страничку, даже не смотря на то что там скролла может и нет, что-то типа такого:

WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
Thread.sleep(500); 

тогда Селениум "прочухивается" и начинает попадать по элементам


  • 0

#11 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений
  • ФИО:Алексей

Отправлено 21 Август 2017 - 07:13

А  этот оверлей физически то глазами видно? просто смотря за выполнением скрипта, я вижу как открывается нужный диалог и никаких посторонних загрузок, крутилок или окон нету. Просто тупо открыт диалог и после тест падает

Оверлэй - это не крутилка и не индикатор загрузки. Если у вас диалог, то в момент открытия диалога основная страница становится заблокирована, как правило, серым фоном. Вот этот серый фон и есть оверлэй.

Именно потому и есть предположение, что искомый элемент находится на основной странице, а не в диалоге. Поставьте breakpoint при выполнении скрипта и посмотрите именно в том окне браузера, который даст вам скрипт. Все остальные способы воспроизвести - не корректны.

Также может быть ситуация - окно диалога открыто, но еще не догрузилось и тоже остается заблокировано собственным оверлэем


  • 0

#12 DmitriyQA

DmitriyQA

    Постоянный участник

  • Members
  • PipPipPip
  • 183 сообщений
  • ФИО:Коваленко Дмитрий Владимирович
  • Город:Tel Aviv

Отправлено 21 Август 2017 - 11:23

Перво наперво посоветую выставить вейты, если ни поможет и элемент действительно ничего не перекрывает то это скорее всего баг селениума.

Много раз сталкивался с ним, обычно возникает если есть кнопка, а на ней иконка или еще элемент,

В таком случае использую ворк ароунд в виде клика с офсетом

 

def click_with_offset(self, elem, x_offset, y_offset):
with ActionChains(self) as action:
action.move_to_element_with_offset(elem, x_offset, y_offset)
action.click()
action.perform()


  • 0

Senior QA/ Wix.com / qaacademy.net



Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн




Темы с аналогичным тегами python, selenium, error

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Яндекс.Метрика
Реклама на портале