t.me/atinfo_chat Telegram группа по автоматизации тестирования

Заполнение обязательных полей. Работа с родителями и дочерними элементами

Теги: #<Tag:0x00007fd76e0119e8> #<Tag:0x00007fd76e011830> #<Tag:0x00007fd76e011650> #<Tag:0x00007fd76e011588> #<Tag:0x00007fd76e011150>

Здравствуйте! У меня есть элемент, для создания которого необходимо заполнить поля на другой странице. Задача автотеста. При нажатии на кнопку выскакивает окно которое указывается на номер ошибки и ссылка, которая переводит на эту страницу. После чего необходимо найти элемент, который нужно заполнить и заполнить его. С какой проблемой я столкнулась. Вопрос с поиском элемента, который нужно заполнить.

как я пыталась это сделать. Под каждым элементом который нужно заполнить есть подпись Field is marked as required and should contain value. И есть нужный input. Я хотела найти родителя этой подписи, Это div. и потом найти ребенка этого div, чем является наш input. Т.е. эта подпись и input, они оба являются дочерними элементами дива. Скажите, не намудрила ли я. И возможно ли это как-то сделать

div id answer6
.br
…p
…span
…input type=“text” id=“text3” name=“text3”
…/span
…span class=“item-note alert-link”
…::before
… “Field is marked as required and should contain value”
…/span
…::after
…/p
./div

можно так, как вы написали, или можно воспользоваться xpath: //span/preceding::input
(предыдущий элемент на том же уровне)

в очередной раз попиарю свою статью xpath написание и отладка, где описал, как можно добраться до любого элемента на странице и потом проверить, что именно от этого элемента можно получить

1 Симпатия

Если используете selenide, о там есть функции parent() и closest().
Но тут есть свои ограничения:

  • parent() – ищет только предка на уровень выше, т.е. если нужно подняться на 2-3 уровня, то придётся использовать несколько раз parent(), что не очень удобно, зато наглядно
  • closest() – не ищет по атрибутам, только по имени. Например, не получится найти элемент table.class или table#id. Зато получится найти элемент table, на каком бы уровне он не был.