Это сообщение об ошибке ...
Uncaught DOMException: Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame.
... означает, что WebDriver экземпляр заблокировал доступ к фрейму перекрестного источника.
Политика того же происхождения
Политика одного и того же источника : Политика одного и того же источника ограничивает взаимодействие документа или сценария, загруженного из одного источника, с ресурсом из другого источника. Это критический механизм безопасности для изоляции потенциально вредоносных документов.
Обмен ресурсами между источниками (CORS)
Обмен ресурсами между источниками (CORS) : Обмен ресурсами между источниками (CORS) - это механизм, использующий дополнительные заголовки HTTP для передачи Клиент браузера , чтобы разрешить AUT (тестируемое приложение) , работающему в одном источнике (домене), иметь разрешение на доступ к выбранным ресурсам с сервера в другом источнике. Веб-приложение отправляет перекрестный HTTP-запрос , когда оно запрашивает ресурс, источник которого (domain
, protocol
и port
) отличается от своего собственного источника.
Пример происхождения
Вот пример сравнения происхождения с URL http://store.company.com/dir/page.html
URL Outcome Reason
http://store.company.com/dir2/other.html Success
http://store.company.com/dir/inner/another.html Success
https://store.company.com/secure.html Failure Different protocol
http://store.company.com:81/dir/etc.html Failure Different port
http://news.company.com/dir/other.html Failure Different host
Что пошло не так
Когда вы пытались перебрать frames
, ваш скрипт / программа пытался получить доступ к <iframe>
с другим источником, используя JavaScript, который был бы огромным недостатком безопасности , если бы вы достигли этого. Как упомянуто выше, браузеры политики одного источника блокируют сценарии, пытаясь получить доступ к <iframe>
с другим источником.
Две страницы имеют одинаковое происхождение, если протокол , порт (если указан один) и хост одинаковы для обеих веб-страниц. Вы увидите, что это время от времени называется "scheme/host/port tuple"
(где «кортеж» - это набор из трех компонентов, которые вместе составляют единое целое). Возможно, протокол , домен , имя хоста и порт должны совпадать с вашим доменом, если вы хотите получить доступ к желаемому кадру.
Решение
AUT может содержать множество кадров / iframes , и некоторые из них могут быть загружены только после определенных JavaScript / Ajax завершен, поскольку некоторые из них могут иметь атрибут style , установленный как display: none; или visiblity как hidden, Конечно, не потребуется взаимодействовать со всеми из них. Таким образом, будет лучше определить атрибуты <iframe>
и соответственно переключаться. Вы можете переключиться на <iframe>
через:
Frame Name
Frame ID
Frame Index
WebElement
Согласно рекомендациям , когда вы намереваетесь переключиться на фрейм, вызовите WebDriverWait для frameToBeAvailableAndSwitchToIt как по ссылкам ниже.
Здесь вы можете найти соответствующее обсуждение по Uncaught DOMException
Ссылки
Некоторые ссылки: