Драматург Python: ожидаем(локатор).to_be_visible() против locator.wait_for()

Есть ли разница между expect(locator).to_be_visible() и locator.wait_for()? Должен ли я предпочесть один другому?

Я посмотрел __doc__s:

  • wait_for: Возвращается, когда элемент, указанный локатором, удовлетворяет опции state. (state по умолчанию — 'visible').
  • to_be_visible: гарантирует, что Locator указывает на прикрепленный и видимый узел DOM.

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
345
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно ли, чтобы локатор был виден, но не прикреплен?

Нет, это невозможно. Чтобы элемент был видимым, он должен быть прикреплен к DOM-дереву (в документе), а также иметь ненулевую высоту и ширину, находиться во вьюпорте, не иметь поверх него других элементов и т.д. Другими словами, видимый — это подмножество присоединенных в том смысле, что все видимые элементы должны быть прикреплены, но не все прикрепленные элементы являются видимыми.

wait_for не является явным утверждением. Это метод локатора, который позволяет блокировать до тех пор, пока не будет удовлетворен конкретный предикат видимости/присоединения (различные параметры описаны в документации). Его можно использовать в сценариях тестирования без expect, но это немного необычно. Основной вариант использования — это когда вы хотите, чтобы элемент находился в каком-то состоянии прикрепления/видимости, но у вас нет определенного действия, которое можно предпринять с ним.

Поскольку большинство действий локатора автоматически ждут, вам, как правило, не потребуется много wait_for в автоматизации браузера — просто используйте действие автоматического ожидания, например .click(), .fill(), .text_content() и т. д.

to_be_visible — явное утверждение, что элемент прикреплен и видим. Вы можете думать об этом как о ориентированном на ожидания подмножестве функциональности, которую предоставляет wait_for.

Как правило, используйте to_be_visible, если вы пишете тесты (это распространенное утверждение), в противном случае используйте wait_for в редких случаях, когда вы выполняете обычную автоматизацию браузера и вам нужно блокировать до тех пор, пока элемент не станет видимым, не предпринимая никаких действий (это относительно редко). ).

Если вы пишете тесты, в которых ожидаете присоединения элемента, но не заботитесь о видимости, вас может заинтересовать to_be_attached, который предоставляет еще одну часть функциональности wait_for в форме утверждения.

Есть несколько ошибок с похожими утверждениями, например to_be_hidden , название которого на момент написания несколько вводило в заблуждение, поскольку оно проходит, даже если элемент не прикреплен. См. этот ответ для подробного анализа.

Другие вопросы по теме