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

Фотография

Selenium. Не работает ожидание кликабельности элеиента.

тест selenium WebDriverWait

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

#1 HVV83

HVV83

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:ФИО

Отправлено 10 августа 2017 - 07:40

Доброго времени, необходимо нажать на кнопку после того как в комбобоксе выбираю нужный пункт. Пишу следующий код, но нажать все равно не могу:

// Thread.sleep(1000);
WebElement searchButton = (new WebDriverWait(driver, 10))
    .until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='hotelsListFilter:searchButton']")));
searchButton.click();

Не отрабатывает, и лишь раскомментировав первую строчку все гуд.

 

Есть ли более правильное решение моей проблемы?


  • 0

#2 user12

user12

    Специалист

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


Отправлено 10 августа 2017 - 07:51

Что значит, не отрабатывает ? Ошибка какая ?

Либо клик происходит, но ошибки нет.

 

1. Поставь elementToBeClickable вместо visibilityOfElementLocated

2. By.xpath("//input[@id='hotelsListFilter:searchButton']")) - у тебя id есть - зачем ты ищешь по xpath ? (но это к проблеме офк не относится)


  • 3

#3 Spock

Spock

    Профессионал

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

Отправлено 10 августа 2017 - 08:13

слип ПЕРЕД ожиданием - вообще не имеет смысла

 

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

 

 

 

необходимо нажать на кнопку после того как в комбобоксе выбираю нужный пункт

а в коде видно, что в комбобоксе нужный пункт НЕ выбирается, мы просто ожидаем что пункт появился, а затем вместо того чтобы его выбрать - жмём на сёрч


  • 1

#4 HVV83

HVV83

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:ФИО

Отправлено 10 августа 2017 - 08:23

Что значит, не отрабатывает ? Ошибка какая ?

Либо клик происходит, но ошибки нет.

 

1. Поставь elementToBeClickable вместо visibilityOfElementLocated

2. By.xpath("//input[@id='hotelsListFilter:searchButton']")) - у тебя id есть - зачем ты ищешь по xpath ? (но это к проблеме офк не относится)

Текст ошибки: "org.openqa.selenium.WebDriverException: Element is not clickable at point (49, 284). Other element would receive the click: <div class="status-dr-mpnl-mask-div" style="Z-INDEX: 1; opacity: 0"></div>"

 

1. Ставил "elementToBeClickable", ошибка осталась та же.

2. Спасибо, буду обращаться по Id, думал что по xpath более правильно.


  • 0

#5 aid

aid

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

  • Members
  • PipPipPipPip
  • 448 сообщений
  • ФИО:Николай


Отправлено 10 августа 2017 - 08:35

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


  • 0

#6 user12

user12

    Специалист

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


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

Добавь просто invisibilityOfElementLocated

 

Там ExpectedConditions.invisibilityOfElementLocated


  • 0

#7 HVV83

HVV83

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:ФИО

Отправлено 11 августа 2017 - 08:51

Всем спасибо. Похоже нашел в чем проблема, после нажатия на каждый элемент у меня появляется окошко типа "ожидайте", которое не успевает исчезнуть, чем перекрывают нажимаемый элемент.


  • 0

#8 Darksol89

Darksol89

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

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


Отправлено 18 августа 2017 - 14:34

Всем спасибо. Похоже нашел в чем проблема, после нажатия на каждый элемент у меня появляется окошко типа "ожидайте", которое не успевает исчезнуть, чем перекрывают нажимаемый элемент.

Как нашли решение, напишите пожалуйста код. Точно такая же проблема, не знаю как побороть...


  • 0

#9 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 29 августа 2017 - 12:21

invisibilityOfElementLocated - не очень хороший вариант, т.к. проверка может успеть пройти до появления этого элемента.

Если причина именно в перекрывающем временно окошке - странно, что elementToBeClickable выдавал туже ошибку.

Он должен был бы подождать пропадания окошка "ожидайте" и успешно найти кликабельный элемент. 


  • 0

#10 user12

user12

    Специалист

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


Отправлено 29 августа 2017 - 12:27

invisibilityOfElementLocated - не очень хороший вариант, т.к. проверка может успеть пройти до появления этого элемента.

Если причина именно в перекрывающем временно окошке - странно, что elementToBeClickable выдавал туже ошибку.

Он должен был бы подождать пропадания окошка "ожидайте" и успешно найти кликабельный элемент. 

 

user12: Мелкий вопрос
elementToBeClickable
 
По докам:
An expectation for checking an element is visible and enabled such that you can click it
 
Т.е. клик происходит если элемент visible and enabled.
Но может же такое быть, что элемент будет перекрыт другим ?
Alexei Barantsev: может. но это не проверяется

  • 1

#11 TatyanaV

TatyanaV

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

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 30 августа 2017 - 10:55

Странно, у меня почти везде именно это условие работает.

Спасибо за информацию, я учту это на будущее.

 

К слову, нежелательности invisibilityOfElementLocated это не отменяет :) Нам как раз Алексей о подводных камнях этой проверки на тренинге рассказывал.


  • 0

#12 user12

user12

    Специалист

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


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

К слову, нежелательности invisibilityOfElementLocated это не отменяет :) Нам как раз Алексей о подводных камнях этой проверки на тренинге рассказывал.

 

Да, про это я тоже слышал.Но у меня всегда норм отрабатывало, не помню проблем


  • 0

#13 Spock

Spock

    Профессионал

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

Отправлено 30 августа 2017 - 12:37

 

 

Да, про это я тоже слышал.Но у меня всегда норм отрабатывало, не помню проблем

оно работает, просто надо использовать грамотно

 

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


  • 0

#14 KinaMa

KinaMa

    Новый участник

  • Members
  • Pip
  • 5 сообщений

Отправлено 27 сентября 2017 - 14:07

 

 

 

Да, про это я тоже слышал.Но у меня всегда норм отрабатывало, не помню проблем

оно работает, просто надо использовать грамотно

 

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

 

Добрый день.

А какой тогда выход в этой ситуации?


  • 0

#15 Spock

Spock

    Профессионал

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

Отправлено 27 сентября 2017 - 14:58

 

Добрый день.

А какой тогда выход в этой ситуации?

1. сначала ждём загрузку страницы

2. потом немного ожидаем появления спиннера, например 1 секунду

3а. если спиннер появился - ждём исчезновения спиннера, фейлим если спиннер будет крутится дольше чем значение по таймауту, например 15 секунд 

3б. если спиннер так и не появился (то есть спиннер исчез до события "страница загружена", до того как мы начали ждать спиннер) - не фейлим и переходим далее


  • 0



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

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

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