Two*_*rts 2 javascript iframe selenium same-origin-policy cors
我试图列出iframe页面中所有s 的名称,所以我可以通过Selenium访问它们.
问题是iframe每次更改的名称,所以我需要循环遍历所有这些.
我正进入(状态:
未捕获的DOMException:阻止具有原点" http:// localhost:8080 "的帧访问跨源帧.
我尝试使用以下方法循环时出错:
for (var f = 0; f < window.frames.length; f++) {
console.log(window.frames[f].name)
}
Run Code Online (Sandbox Code Playgroud)
有没有办法以iframe不同的方式获得名称?
此错误消息...
Uncaught DOMException: Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame.
Run Code Online (Sandbox Code Playgroud)
...意味着webdriver的实例阻挡从访问跨来源帧.
同源策略:同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源交互.它是隔离潜在恶意文档的关键安全机制.
跨源资源共享(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
Run Code Online (Sandbox Code Playgroud)
当你试图遍历frames你的脚本/程序试图<iframe>使用JavaScript 访问具有不同来源的一个时,如果你已经实现它将是一个巨大的安全漏洞.如上所述,同源策略浏览器会阻止尝试访问<iframe>具有不同来源的脚本.
如果两个网页的协议,端口(如果指定了端口)和主机相同,则两个页面具有相同的来源.你会看到这被称为"scheme/host/port tuple"有时(其中"元组"是一组三个组件,它们共同构成一个整体).或许协议,域名,主机名和端口,当你想访问所需的框架必须是同你同一个域.
所述AUT可能包含众多帧/内部框架和其中一些可能只有某些之后被加载的JavaScript/Ajax的已完成,其中作为它们中的一些可以是具有样式属性设置为显示:无; 或可视性为隐藏.粗糙的不需要与所有这些进行交互.因此,这将是一个更好的方式来确定的属性的<iframe>,并相应地进行切换.你可以切换到<iframe>通过:
Frame NameFrame IDFrame IndexWebElement根据最佳实践,当你打算切换到一个框架时,会根据下面的引用为frameToBeAvailableAndSwitchToIt引导WebDriverWait.
在这里,您可以找到有关Uncaught DOMException的相关讨论
一些参考:
在本讨论中,您将找到有关SecurityError的详细分析:阻止具有访问跨源帧的原点的帧
在本讨论中,您将找到不同的方法是否可以切换到框架中的元素而不使用Selenium Webdriver Java中的driver.switchTo().frame("frameName")?
在A Better Approach to Switch Frames本讨论的部分中,您将找到关于如何选择html元素的不同方法,无论它在selenium中的框架是什么?
| 归档时间: |
|
| 查看次数: |
19415 次 |
| 最近记录: |