Selenium WebDriver如何克服同源策略

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium WebDriver如何克服同源策略相关的知识,希望对你有一定的参考价值。

Selenium WebDriver如何克服同一起源政策?

同源政策问题在Selenium RC中

答案

首先,出于安全原因引入了“同源策略”,它确保了来自其他站点的脚本永远无法访问您站点的内容。根据该政策,浏览器中加载的任何代码只能在该网站的域内运行。

--------------------------------------------------------------------------------- ----------------------------------------------

它做了什么???

同源策略禁止javascript代码访问与启动时不同的域中的元素。例如,www.google.com中的html代码使用JavaScript程序“testScript.js”。相同的原始政策只允许testScript.js访问google.com中的网页,例如google.com/mail,google.com/login或google.com/signup。但是,它无法访问来自yahoo.com/search或fbk.com等不同站点的页面,因为它们属于不同的域。

这就是为什么在Selenium RC之前,测试人员需要安装Selenium Core(一个JavaScript程序)的本地副本和包含正在测试的Web应用程序的Web服务器,因此它们属于同一个域。 -------------------------------------------------- -------------------------------------------------- --------------------------------

怎么避免???

为了避免使用“同源策略”代理注入方法,在代理注入模式下,Selenium Server充当客户端配置的HTTP代理,它位于浏览器和被测试的应用程序之间,然后在虚构的URL下屏蔽AUT

Selenium使用java脚本来驱动浏览器上的测试; Selenium将自己的js注入到从aut返回的响应中。但是有一个java脚本安全限制(相同的原始策略),只有当js也来自与html相同的域时,才允许你使用js修改页面的html。这种安全限制至关重要,但破坏了Selenium的工作。这是Selenium服务器发挥重要作用的地方。

另一答案

在Selenium WebDriver之前,Selenium是“Javascript Task Runner”。它将自己设置为服务器(本地),并打开指向本地运行的Selenium服务器的浏览器。所以浏览器现在正在与本地运行的Selenium Server交谈。

这是一个问题,因为浏览器从Selenium获取一个脚本,告诉它它想从http://websitetotest.com获取资源。但是浏览器从http://127.0.0.1:9000/selenium(例如)获得了这个脚本。浏览器说“嘿,这个脚本来自本地主机,现在它正在从一些外部网站请求资源。这违反了同源策略。

WebDriver出现并创建了一个代理,以欺骗浏览器认为它正在与Selenium和websitetotest“定位”的同一服务器进行通信。 Abhishek就此提供了简明扼要的解释。

另一答案

这可能是一个迟到的回复,但是,如果你指的是selenium webdriver而不是selenium RC,那么答案是你不必担心webdriver的同源策略,因为每个浏览器都有自己的webdriver.This的全部优点是webdriver与RC相反,即浏览器中没有硒核注入,浏览器和AUT之间没有中间件客户端服务器.Webdriver在控制浏览器自动化方面提供本机操作系统级支持。

以上是关于Selenium WebDriver如何克服同源策略的主要内容,如果未能解决你的问题,请参考以下文章

Python Selenium.WebDriver 最强详解页面加载策略

使用 Jetty 公开目录(或克服同源策略)

如何使用selenium webdriver来判断一个网页加载完毕

如何使用 Java 在 selenium webdriver 中打开新选项卡,或者如何使用 selenium webdriver 使用动作类在 selenium 中按 ctrl + T [重复]

如何使用selenium webdriver来判断一个网页加载完毕

Selenium & webdriver.io 如何使用 executeScript?