Поиск элементов на сайте с iframes с использованием Perl selenium

#perl #iframe #selenium-webdriver

#perl #iframe #selenium-webdriver

Вопрос:

В настоящее время я автоматизирую взаимодействие с веб-сайтом, на котором есть iframes. Некоторые элементы также без идентификаторов, и они не находятся в одной иерархии. Я хочу щелкнуть по <a> </a> тегу, но не могу этого сделать. Также читайте сообщения о том, как это сделать на Java, но в Perl нет ничего, что могло бы вернуться к содержимому по умолчанию (или я не нашел).

Кто-нибудь, имеющий опыт работы с этим или имеющий какие-либо ссылки на любой сайт, объясняющий это, был бы очень полезен. Пожалуйста, обратите внимание, что я реализую это в Perl с использованием Selenium:: Chrome.

Комментарии:

1. Перекрестный пост, уже ответил на perlmonks.com/?node_id=1174446

Ответ №1:

Найдите iframe, затем переключитесь на iframe и используйте xpath для поиска iframe:-

  e.g. //iframe[@class="value of class"] 

  $element = $driver->find_element('coolestWidgetEvah','id');
  $driver->switch_to_frame('frameName');
  

Позвольте мне угадать, как переключиться на содержимое по умолчанию в perl:

   $driver->switch_to_frame('defaultcontent');
  

переключение на содержимое по умолчанию — это проверка работы Java перед использованием.

Ответ №2:

При надлежащем исследовании я могу ответить на свой запрос. Для переключения на фрейм мы можем использовать следующие два варианта:

  1. Переключение на фрейм с использованием его идентификатора:

$driver->switch_to_frame(‘frame_id’);

  1. Переключение на фрейм с использованием xpath к фрейму:

$driver->switch_to_frame($driver->find_element_by_xpath(«.//*[@id=’id1′]/div[2]/div/iframe»));

  1. Есть возможность переключиться на фрейм, используя номер фрейма, но в случае сайтов, имеющих два множества фреймов, становится сложно подсчитать количество.

Примечание: Мы можем работать с веб-элементами, присутствующими во фрейме, только при переключении на фрейм.

Теперь, чтобы вернуться к фрейму по умолчанию, используйте:

$driver->switch_to_frame();