这个错误信息...
Uncaught DOMException: Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame.
...暗示WebDriver实例被阻止访问跨域框架。
同源策略
同源策略:同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源交互。它是用于隔离潜在恶意文档的关键安全机制。
跨域资源共享 (CORS)
跨域资源共享 (CORS):跨域资源共享 (CORS) 是一种机制,它使用额外的HTTP 标头告诉浏览器客户端让在一个源(域)运行的AUT(被测应用程序)有权访问从不同来源的服务器中选择的资源。一个Web应用程序进行跨域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可能包含众多帧/内部框架和其中一些可能只有在某些加载的JavaScript / Ajax的已完成,其中作为它们中的一些可以具有样式属性集为显示:无; 或可见性为hidden。当然,不需要与所有人互动。因此,这将是一个更好的方式来确定的属性的<iframe>
,并相应地进行切换。您可以切换到<iframe>
通过:
Frame Name
Frame ID
Frame Index
WebElement
根据最佳实践,当您打算切换到框架时,会根据以下参考资料为frameToBeAvailableAndSwitchToIt引入WebDriverWait。
在这里您可以找到有关Uncaught DOMException的相关讨论
参考
一些参考: