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

Фотография

Проблема с isEnabled() и getAttribute(), если атрибут disabled определ

web element disabled webdriver selenium isEnabled() getAttribute()

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

#1 natanjka

natanjka

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

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Яковлева Наталия
  • Город:Рига

Отправлено 06 июня 2016 - 15:53

Помогите, пожалуйста, решить проблему.

 

Пытаюсь с помощью Selenium WebDriver проверить, какое состояние у кнопки - атрибута disabled. Применяю для этого метод isEnabled(). Из описания метода: checks for the disabled attribute 

on the button element. If the attribute "disabled" is not present, it returns True . Из описания (да и на практике подтвердилось), что этот метод подходит, если атрибут disabled определён так -
 
<button type="button" disabled>Click Me!</button>
 
То есть, isEnabled() проверяет наличие самого атрибута. Атрибут есть - результат false. Атрибута нет - результат true.
 
Но в моём случае атрибут определён так - 
 
<body>
  <button disabled="false" style="background-color: blue" id="blue">Blue content</button>
  <button disabled="true" style="background-color: orange" id="orange">Orange content</button>
</body>
 
При таком определении, isEnabled() для обеих кнопок выдаёт "true" .
 
Подскажите, можно ли определять состояние disabled у кнопки с помощью какого-то другого метода WebDriver? Или нужно писать собственную проверку на значение disabled?
 
Интересно так же и то, что метод getAttribute("disabled") так же выдаёт true для обеих кнопок...
 
Заранее спасибо за помощь!
 
 

  • 0

#2 Saga

Saga

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

  • Members
  • Pip
  • 37 сообщений
  • ФИО:Maryna Kolesnik
  • Город:Киев


Отправлено 06 июня 2016 - 17:34

Язык не указан, но осмелюсь предположить, что речь идет о java.

 

Для решения задачи достаточно убедиться, что у элемента в определенных случаях атрибут  disabled='true', а в других 'false' ?

 

Тогда у элемента можно узнать значение атрибута: element.getAttribute('disabled'), будет возвращать "true", "false", если отсутствует - null.

 

 Если важно убедиться, что над кнопкой недоступны действия, а isEnabled на оба состояния выдает true, можно попробовать такой себе способ: написать метод, который пытается кликнуть по кнопке, и если ловит исключение - то кнопка задизейблена.

 

Можно скомбинировать обе проверки.


  • 0

#3 natanjka

natanjka

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

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Яковлева Наталия
  • Город:Рига

Отправлено 07 июня 2016 - 07:38

Да, язык - Java, забыла указать...

 

"Для решения задачи достаточно убедиться, что у элемента в определенных случаях атрибут  disabled='true', а в других 'false' ?"

Да, именно так.

 

"Тогда у элемента можно узнать значение атрибута: element.getAttribute('disabled'), будет возвращать "true", "false", если отсутствует - null."

Как я писала выше, element.getAttribute('disabled') тоже почему-то выдаёт в обоих случаях "true"...Поэтому такой способ тоже не подходит :(

 

В целом, мне нужно дождаться, пока состояние будет disabled="false" . Вроде бы, в этом мне могли бы помочь методы типа 

 

wait.until(ExpectedConditions.attributeToBe(By.className("<button_class_name>"), "disabled", "false")) или

wait.until(ExpectedConditions.elementToBeClickable(By.className("<button_class_name>")))

 

Но, похоже, оба этих метода основаны на методах getAttribute() и isEnabled(), соответственно, тоже не дают верный результат.

 

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

в моём случае это не очень удобно, так как действие "кликнуть по кнопке-словить исключение" придётся делать в каком-то цикле, чтобы имитировать ожидание ожидаемого условия. Но, насколько я понимаю, в моей ситуации это действительно единственный способ...


  • 0

#4 TatyanaV

TatyanaV

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

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


Отправлено 07 июня 2016 - 09:27

css:

#someElementId:not([disabled*='u']):not(disabled)

 

:not([disabled*='u']) - исключит те, у которых "disabled='true'", но пропустит "disabled='false'"

:not(disabled) - исключит те, у которых просто "disabled".

 

Ожидать disabled='false' можно и обратную сторону:

#someElementId[disabled*='false']


  • 0



Темы с аналогичным тегами web element, disabled, webdriver, selenium, isEnabled(), getAttribute()

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

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