очистить поле ввода selenium python

Selenium для Python. Глава 3. Навигация

Продолжение перевода неофициальной документации Selenium для Python.
Перевод сделан с разрешения автора Baiju Muthukadan.
Оригинал можно найти здесь.

Содержание:

3. Навигация

Предположительно, первое, что вы захотите сделать с помощью WebDriver, будет переход по ссылке. Обычно для таких целей используют метод get:

Метод driver.get перенаправляет к странице URL, поданной в параметре. WebDriver будет ждать пока страница не загрузится полностью (то есть, событие “onload” игнорируется), прежде чем передать контроль вашему тесту или скрипту. Стоит отметить, что если страница использует много AJAX-кода при загрузке, то WebDriver может не распознать, загрузилась ли она полностью. Если необходимо гарантировать полную загрузку страниц, вы можете использовать ожидания (англ. waits).

3.1. Взаимодействие со страницей

Сама по себе возможность переходить по ссылке не так уж полезна. Что действительно хочется сделать, так это взаимодействовать со страницей, или, если быть точным, с элементами HTML на странице. Прежде всего необходимо найти их. WebDriver предоставляет ряд способов для поиска элементов. К примеру, на странице есть элемент, определенный таким образом:

Его можно найти, используя любой из следующих методов:

Также вы можете искать адрес гиперссылки по тексту гиперссылки, но будьте бдительны: текст должен совпадать в точности. Также будьте внимательны при использовании XPATH в WebDriver. Если существует больше одного элемента, удовлетворяющего условиям запроса, вернется только первый найденный. Если ничего не будет найдено, будет возбуждено исключение NoSuchElementException.

WebDriver имеет “Объекто-ориентированное” API [Интерфейс прикладного программирования (c англ. application programming interface) — набор готовых методов и свойств, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах. API позволяет пользоваться функционалом исходного приложения (библиотеки, сервиса), не вникая в тонкости реализации этого функционала. — Прим. пер.]; мы представляем все типы элементов используя один и тот же интерфейс. Это означает, что хоть вы и видите множество доступных методов, которые можно выбрать при нажатии комбинации клавиш автозаполнения в вашем IDE [Интегрированная среда разработки (англ. Integrated Development Environment) — система программных средств, используемая программистами для разработки программного обеспечения. — Прим. пер.], не все из них будут иметь для вас смысл или не все будут действующими. Не беспокойтесь! WebDriver попытается все исправить, так что если вы вызовете метод, используя его неправильно (например, используете “setSelected()” для “мета” тэга [Мета-теги (англ. meta tags) — HTML-теги, предназначенные для предоставления структурированных метаданных о веб-странице. Как правило, указываются в заголовке HTML-документа. — Прим. пер.]), WebDriver возбудит исключение.

Итак, мы получили элемент. Что вы можете с ним сделать? Первым делом вы захотите ввести какой-нибудь текст в текстовое поле:

Также вы можете имитировать нажатие клавиш-стрелок клавиатуры с помощью класса “Keys”:

Метод send_keys можно вызвать для любого элемента, который позволяет проверить сочетания клавиш, такие как те, что используются в GMail. Существует побочный эффект, заключающийся в том, что ввод в текстовое поле не очищает его автоматически. Вместо этого то, что вы набираете на клавиатуре, будет дописываться к уже вписанному в поле. Очистить содержимое тектового поля или текстовой области textarea легко — с помощью метода clear:

3.2. Заполнение форм

Мы уже рассмотрели ввод текста в текстовую область или текстовое поле, а как быть с другими элементами? Вы можете попробовать раскрыть раскрывающийся список, после чего можно использовать “setSelected” для выделения тэгов вроде OPTION. Работать с тэгами SELECT не так уж сложно:

Такой код найдет первый элемент “SELECT” на странице, и в цикле пройдет по всем тэгам OPTION поочередно, сообщая их значения и поочередно выделяя их.

Как можно заметить, это не самый быстрый способ работы с элементами SELECT. Поддерживаемые вебдрайвером классы содержат один, называющийся “Select”, он предоставляет более удобные способы взаимодействия:

Также WebDriver предоставляет возможность снятия выделения со всех элементов выпадающего списка:

Этот код снимает выделение со всех тегов OPTION первого тега SELECT на странице.

Допустим, для теста вам необходим список всех выделенных по умолчанию опций. Класс Select предоставляет такое свойство (возвращает список):

Для получения всех доступных опций используйте:

После того как с заполнением формы будет покончено, вы, вероятно, захотите “сохранить” изменения [submit — отправить, передать, подтвердить — Прим. пер.]. Одним из способов сделать это — найти кнопку “submit” и кликнуть по ней:

В качестве альтернативы первому методу можно использовать метод “submit”, доступный для каждого элемента. Если вызвать его для элемента внутри формы, WebDriver пробежится по всей структуре DOM, пока не найдет закрывающийся тег формы, и затем вызовет для нее submit. Если элемент находится не в форме, тогда возбудится исключение NoSuchElementException:

3.3. Перетаскивание

Есть два варианта «перетаскивания» элементов: перемещение элемента на определенную величину, либо перетаскивание его на другой элемент:

3.4. Переключение между окнами и фрэймами

Современные веб-приложения редко обходятся без фреймов (frame) и редко когда ограничиваются одним окном. WebDriver поддерживает переключение между именованными окнами с помощью метода “switch_to_window”:

Все вызовы, начинающиеся с driver теперь будут истолкованы как обращенные к полученному окну. Но откуда вам знать имя окна? Взгляните на код javascript или ссылку, которые открывают окно:

Также вы можете послать “дескриптор окна” методу “switch_to_window()”. Пользуясь этой особенностью, вы можете использовать цикл для перебора всех открытых окон, к примеру, так:

Еще вы можете переходить между фрэймами (frame или iframes):

Можно получить доступ к подчиненным фреймам, подавая путь, разделяемый точкой, или можно получить фрейм по индексу:

Следующий код перенаправит к фрейму с именем “child”, который в свою очередь принадлежит первому подчиненному фрейму фрейма “frameName”. Пути к фреймам описываются полностью — от верхнего уровня:

Когда работа с фреймами будет завершена, необходимо переключиться обратно, к главному фрейму, что может быть сделано следующим образом:

3.5. Всплывающие окна

Selenium WebDriver из упаковки поддерживает управление всплывающими диалоговыми окнами. После того как вы инициируете запуск, откроется окно, управлять им можно так:

Код вернет объект текущего открытого окна. С этим объектом вы можете принять, отклонить вопрос окна, прочитать его содержимое или даже ввести текст по приглашению окна. Интерфейс взаимодействия со всплывающими окнами работает одинаково хорошо как для предупреждений (alerts), так и для запросов к подтверждению (confirms) и приглашений к вводу (prompts). За дополнительной информацией обратитесь к документации API.

3.6. Навигация: история и локация

Чуть раньше мы упомянули о навигации по ссылке с ипользованием комманды “get” ( driver.get(«www.example.com») ). Как вы уже могли заметить, WebDriver для отдельных случаев предоставляет узконаправленные, специализированные интерфейсы взаимодействия, и навигация не исключение. Чтобы перейти по ссылке, вы можете воспользоваться методом get:

Чтобы перейти вперед или назад по истории вкладки:

Имейте в виду, что этот функционал полностью зависит от используемого драйвера. Вы можете получить непредвиденный результат, если привыкли к поведению какого-либо конкретного браузера, а работаете с другим.

3.7. Куки (cookies)

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

Источник

Clear text from textarea with selenium

I’ve got some tests where I’m checking that the proper error message appears when text in certain fields are invalid. One check for validity is that a certain textarea element is not empty.

If this textarea already has text in it, how can I tell selenium to clear the field?

11 Answers 11

Option a)

WebElement

There are many ways to get the required WebElement, e.g.:

Option b)

If this element is a text entry element, this will clear the value.

Note that the events fired by this event may not be as you’d expect. In particular, we don’t fire any keyboard or mouse events.

очистить поле ввода selenium python. Смотреть фото очистить поле ввода selenium python. Смотреть картинку очистить поле ввода selenium python. Картинка про очистить поле ввода selenium python. Фото очистить поле ввода selenium python

очистить поле ввода selenium python. Смотреть фото очистить поле ввода selenium python. Смотреть картинку очистить поле ввода selenium python. Картинка про очистить поле ввода selenium python. Фото очистить поле ввода selenium python

In the most recent Selenium version, use:

In my experience, this turned out to be the most efficient

We are sending Ctrl + Backspace to delete all characters from the input, you can also replace backspace with delete.

EDIT: removed Keys dependency

If this element is a text entry element, this will clear the value.

очистить поле ввода selenium python. Смотреть фото очистить поле ввода selenium python. Смотреть картинку очистить поле ввода selenium python. Картинка про очистить поле ввода selenium python. Фото очистить поле ввода selenium python

It is general syntax

очистить поле ввода selenium python. Смотреть фото очистить поле ввода selenium python. Смотреть картинку очистить поле ввода selenium python. Картинка про очистить поле ввода selenium python. Фото очистить поле ввода selenium python

Am using selenium==3.141.0 and I don’t know why

Which perfectly worked for me.

With a simple call of clear() it appears in the DOM that the corresponding input/textarea component still has its old value, so any following changes on that component (e.g. filling the component with a new value) will not be processed in time.

If you take a look in the selenium source code you’ll find that the clear()-method is documented with the following comment:

/** If this element is a text entry element, this will clear the value. Has no effect on other elements. Text entry elements are INPUT and TEXTAREA elements. Note that the events fired by this event may not be as you’d expect. In particular, we don’t fire any keyboard or mouse events. If you want to ensure keyboard events are fired, consider using something like <@link #sendKeys(CharSequence. )>with the backspace key. To ensure you get a change event, consider following with a call to <@link #sendKeys(CharSequence. )>with the tab key. */

So using this helpful hint to clear an input/textarea (component that already has a value) AND assign a new value to it, you’ll get some code like the following:

Sorry for this code being Java and not Python. Also, I had to skip out an additional «waitUntilPageIsReady()-method that would make this post way too long.

Hope this helps you on your journey with Selenium!

Источник

Очистить текст из текстового поля с помощью селена

У меня есть несколько тестов, в которых я проверяю, появляется ли правильное сообщение об ошибке, когда текст в определенных полях недействителен. Одной из проверок действительности является то, что определенный элемент textarea не пуст.

Если в этом текстовом поле уже есть текст, как я могу сказать селену, чтобы он очистил поле?

Ты можешь использовать

Если этот элемент является элементом ввода текста, это очистит значение.

В самой последней версии Selenium используйте:

Если этот элемент является элементом ввода текста, это очистит значение.

Это общий синтаксис

По моему опыту, это оказалось наиболее эффективным

Мы отправляем Ctrl + Backspace, чтобы удалить все символы из ввода, вы также можете заменить backspace на delete.

РЕДАКТИРОВАТЬ: удалена зависимость ключей

С помощью простого вызова clear () в DOM появляется, что соответствующий компонент input / textarea все еще имеет свое старое значение, поэтому любые последующие изменения в этом компоненте (например, заполнение компонента новым значением) не будут обработаны вовремя.

Если вы посмотрите исходный код селена, вы обнаружите, что метод clear () задокументирован со следующим комментарием:

Таким образом, используя этот полезный совет, чтобы очистить поле ввода / текста (компонент, который уже имеет значение) И присвоить ему новое значение, вы получите следующий код:

Извините, что этот код является Java, а не Python. Кроме того, мне пришлось пропустить дополнительный метод waitUntilPageIsReady (), который делал бы этот пост слишком длинным.

Надеюсь, это поможет вам в вашем путешествии с Selenium!

Источник

Веб-драйвер Selenium не может очистить поле, но может отправить на него send_keys

Я пытаюсь создать программу, которая регистрируется в Instagram с новой учетной записью, у меня есть электронные письма, а остальные сгенерированы, когда я продолжаю и посылаю send_keys в соответствующие поля, это прекрасно работает. Я хотел реализовать функцию повтора, которая бы очищала поле электронной почты и пробовала другую почту. Однако это не работает, хотя send_keys к нему работал ранее? Фрагмент моего кода ниже.

Это попытка создать новую учетную запись с соответствующими учетными данными, однако, когда это не удается, я хочу, чтобы он попытался найти элемент, который присутствует только в случае сбоя, и если он обнаружит это, он должен очистить поле электронной почты и повторить попытку с другой. Код ниже.

Он не очищает поле, но и не вызывает ошибку. Затем он продолжает вводить 2-е письмо без проблем. Я ценю любую помощь по этому вопросу.

РЕДАКТИРОВАТЬ: Размещать больший фрагмент кода.

3 ответа

Вы можете использовать следующий код в качестве альтернативы для метода clear:

Так что это определенно будет работать в качестве обходного пути. Я только что попробовал это на Instagram. Хотя для меня не было поля с ярлыком арии под названием Email. Для меня это был лейбл «Мобильный номер или электронная почта».

Я буду продолжать смотреть на это, чтобы понять, почему команда clear не сработала.

Вы можете попробовать что-то вроде этого, чтобы удалить mail1.

Источник

Как я могу последовательно удалить текст по умолчанию из элемента ввода с помощью Selenium?

Я пытаюсь использовать Selenium WebDriver для ввода текста в элемент ввода GWT, который имеет текст по умолчанию, «введите идентификатор пользователя». Вот несколько способов, которыми я пытался заставить это работать:

странное дело, как это работает только некоторое время. Иногда это заканчивается поиском «Enter User IDus», в основном начиная вводить» username » после текста по умолчанию-и даже не заканчивая этим.

любые другие лучшие, более надежные способы очистки по умолчанию текст из элемента GWT?

редактировать, чтобы добавить: HTML элемента ввода. К сожалению, там не так много, чтобы увидеть, благодаря горячей JS/GWT. Вот поле, когда оно не выбрано:

после того, как я щелкнул его и дал ему фокус вручную, текст по умолчанию и «пустой» класс удаляются.

JS to setDefaultText() вызывается как onBlur() и onChange() если изменение приводит к пустому текстовому полю. Угадайте, почему searchField.clear() не помогает.

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

4 ответов

хорошо, сценарий, очевидно, срабатывает, когда clear() метод очищает input и оставляет его пустым. Решения, которые она предложила, приведены ниже.

наивного один, прессы Backspace 10 раз:

( StringUtils.repeat() из Apache Commons Lang или Google Guava’s Strings.repeat() может пригодится)

удалить контент input через JavaScript:

Параметр Значение input через JavaScript в целом:

обратите внимание, что javascript не всегда может работать, как показано здесь:почему я не могу очистить поле ввода с помощью JavaScript?

для чего это стоит, у меня очень похожая проблема. С WebDriver 2.28.0 и 18.0.1 Firefox и

Я также использую GWT, но могу воспроизвести его с помощью простого HTML / JS:

этот тест терпит неудачу большую часть времени:

это может быть просто ОС, отвлекающая внимание от браузера таким образом, что WebDriver не может контролировать. Мы, похоже, не получаем эту проблему на сервере CI, возможно, это так.

Я не могу добавить комментарий, поэтому я ставлю его в качестве ответа здесь. Я хочу сообщить вам, что если вы хотите использовать только javascript для очистки и / или редактирования входного текстового поля, то подход javascript, данный @slanec не будет работать. Вот пример: почему я не могу очистить поле ввода с помощью JavaScript?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *