Selenium WebDriver如何克服同源策略?
Selenium RC中存在同源策略问题
发布于 2015-09-30 14:18:23
首先,“同源策略”是出于安全原因引入的,它确保您的站点的内容永远不会被来自其他站点的脚本访问。根据该策略,浏览器中加载的任何代码只能在该网站的域内运行。
它做了什么?
同源策略禁止JavaScript代码访问来自与其启动位置不同的域的元素。例如,www.google.com中的HTML代码使用JavaScript程序"testScript.js".同源策略登录将仅允许testScript.js访问google.com中页面,例如google.com/、google.com/ 或google.com但是,它不能访问来自不同站点的页面,例如yahoo.com/search或fbk.com,因为它们属于不同的域。
这就是为什么在Selenium RC之前,测试人员需要安装Selenium Core (一个JavaScript程序)和包含被测试web应用程序的web服务器的本地副本,以便它们属于同一个域。
如何避免?
为了避免使用
“同源策略”,使用了代理注入方法,在代理注入模式下,Selenium Server充当客户端配置的代理,它位于浏览器和被测应用程序之间,然后将屏蔽在一个虚构的URL之下
Selenium使用java脚本来驱动浏览器上的测试;Selenium将自己的js注入到从aut返回的响应中。但是有一个java脚本安全限制(同源策略),它允许您仅当js也来自于与html相同的域时才使用js修改页面的html。这个安全限制非常重要,但却破坏了Selenium的工作。这就是Selenium服务器扮演重要角色的地方。
发布于 2016-05-06 02:57:36
在Selenium WebDriver之前,Selenium是"Javascript Task Runner“。它会将自己设置为(本地)服务器,并打开一个指向本地运行的Selenium服务器的浏览器。因此,浏览器现在正在与本地运行的Selenium Server对话。
但是这是一个问题,因为浏览器从Selenium获取一个脚本,该脚本告诉它想要从http://websitetotest.com获取资源。但是浏览器从http://127.0.0.1:9000/selenium获得了这个脚本(例如)。浏览器会说:“嘿,这个脚本来自本地主机,现在它正在从某个外部网站请求资源。这违反了same-origin-policy.
WebDriver出现了,并创建了一个代理来欺骗浏览器,使其认为它正在与Selenium和websitetotest“位于”的同一服务器对话。Abhishek对此提供了一个简洁的解释。
发布于 2016-08-27 03:10:33
这可能是一个迟来的答复,但是,如果你指的是selenium webdriver而不是selenium RC,那么答案是你不必担心webdriver的同源策略,因为每个浏览器都有自己的webdriver.This是webdriver相对于RC的全部优势,即没有selenium核心注入到浏览器中,也没有在浏览器和AUT.Webdriver之间的中间件客户端服务器在控制浏览器自动化方面提供本机操作系统级别的支持。
https://stackoverflow.com/questions/32858214
复制相似问题