В Selenium для Python, как я могу получить атрибут элемента, а не его свойство? - PullRequest
1 голос
/ 25 апреля 2019

Согласно документам, get_attribute фактически возвращает свойство, а не атрибут, если только свойство не существует, в этом случае оно возвращается к атрибуту.

get_property всегда будет возвращать свойство.

Есть ли способ всегда получить атрибут? Я нахожу странным, что функция с именем "get_attribute" установит приоритет значения свойства над значением атрибута.

1 Ответ

2 голосов
/ 25 апреля 2019

get_attribute (attribute_name)

get_attribute (attribute_name) получает данный attribute или property элемента.

Этот метод сначала попытается вернуть значение свойства с заданным именем. Если свойство с таким именем не существует, оно возвращает значение attribute с тем же именем. Если attribute с таким именем отсутствует, возвращается None.

Значения, которые считаются истинными, то есть равными true или false, возвращаются как логические значения. Все другие не None значения возвращаются в виде строк. Для атрибутов или свойств, которые не существуют, возвращается None.

  • Args:

    attribute_name - Name of the attribute/property to retrieve.
    
  • Пример:

    # Check if the "active" CSS class is applied to an element.
    is_active = "active" in target_element.get_attribute("class")   
    

get_property (property_name)

get_property (property_name) получает заданное свойство элемента.

  • Args:

    property_name - Name of the property to retrieve.
    
  • Пример:

    text_length = target_element.get_property("text_length")
    

Все еще звучит похоже? Читайте ниже ...


Атрибуты и свойства

Когда браузер загружает страницу, он анализирует HTML и генерирует из него DOM-объекты. Для узлов элементов большинство стандартных атрибутов HTML автоматически становятся свойствами объектов DOM.

Например, если тег:

<body id="page">

тогда объект DOM имеет body.id="page".

Примечание : Отображение атрибута-свойства не однозначное!


Атрибуты HTML

В HTML теги могут иметь атрибуты. Когда браузер анализирует HTML для создания объектов DOM для тегов, он распознает стандартные атрибуты и создает из них свойства DOM.

Таким образом, когда элемент имеет идентификатор или другой стандартный атрибут, создается соответствующее свойство. Но этого не произойдет, если атрибут нестандартный.

Примечание : Стандартный атрибут для одного элемента может быть неизвестен для другого. Например, type является стандартным атрибутом для тега <input>, но не для тега <body>. Стандартные атрибуты описаны в спецификации для соответствующего класса элементов.

Итак, если атрибут нестандартный, для него не будет DOM-свойства. В этом случае все атрибуты доступны с помощью следующих методов:

  • elem.hasAttribute(name): проверка на существование.
  • elem.getAttribute(name): получает значение.
  • elem.setAttribute(name, value): устанавливает значение.
  • elem.removeAttribute(name): удаляет атрибут.

Пример чтения нестандартного свойства:

<body something="non-standard">
  <script>
    alert(document.body.getAttribute('something')); // non-standard
  </script>
</body>

Синхронизация атрибута свойства

При изменении стандартного атрибута соответствующее свойство обновляется автоматически и (за некоторыми исключениями) и наоборот. Но есть исключения, например input.value синхронизируется только от attribute -> до property, но не обратно. Эта функция действительно полезна, потому что пользователь может изменить значение, а затем после него, если мы хотим восстановить «оригинальное» значение из HTML, оно находится в атрибуте.

...