Есть ли разница между expect(locator).to_be_visible() и locator.wait_for()? Должен ли я предпочесть один другому?
Я посмотрел __doc__s:
state. (state по умолчанию — 'visible').Все равно не очень понятно. Возможно ли, чтобы локатор был виден, но не прикреплен? Если да, то будут ли они равны, если я точно знаю, что найденный элемент прикреплен?






Возможно ли, чтобы локатор был виден, но не прикреплен?
Нет, это невозможно. Чтобы элемент был видимым, он должен быть прикреплен к 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 , название которого на момент написания несколько вводило в заблуждение, поскольку оно проходит, даже если элемент не прикреплен. См. этот ответ для подробного анализа.