如何向使用 Selenium Webdriver 处理的 HTTP 请求添加标头或参数?
Posted
技术标签:
【中文标题】如何向使用 Selenium Webdriver 处理的 HTTP 请求添加标头或参数?【英文标题】:How to add headers or parameters to an HTTP request handled with Selenium Webdriver? 【发布时间】:2012-05-12 16:49:54 【问题描述】:我正在使用 Selenium Webdriver 对 Web 应用程序进行单元测试。它用于 JUnit 测试 尽管广泛阅读了可用的文档并四处搜索,但我找不到以下方法:
向驱动程序传递的 HTTP 请求添加标头。 为这样的请求添加参数,就好像驱动程序在提交表单后得到了他的目标 URL。可以使用适当的表单创建一个测试网页,并让 Webdriver 从它反弹以自动获取这些参数,但这是一个非常丑陋的 hack。我想避免它,特别是为了测试原子性。 (这是单元测试。)
在使用 Wendriver 之前,我使用 Spring 的 MockHttpServletRequest 和 MockHttpServletResponse 来执行此操作,效果很好,但我想使用 Webdriver 的强大功能来断言目标页面的内容。
【问题讨论】:
【参考方案1】:您可以尝试评估 browsermob-proxy。它有助于操作标题。 https://github.com/webmetrics/browsermob-proxy。与 webdriver 集成很简单。您只需要使用设置的代理值启动驱动程序。
【讨论】:
【参考方案2】:可能对正在寻找解决方案的其他人有用
这就是我解决问题的方法。希望对有类似设置的人有所帮助。
-
将 ModHeader 扩展添加到 chrome 浏览器
如何下载 Modheader?链接
ChromeOptions options = new ChromeOptions();
options.addExtensions(new File(C://Downloads//modheader//modheader.crx));
// Set the Desired capabilities
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
// Instantiate the chrome driver with capabilities
WebDriver driver = new RemoteWebDriver(new URL(YOUR_HUB_URL), options);
-
转到浏览器扩展并捕获 ModHeader 的本地存储上下文 ID
-
导航到 ModHeader 的 URL 以设置本地存储上下文
.
// set the context on the extension so the localStorage can be accessed
driver.get("chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/_generated_background_page.html");
Where `idgpnmonknjnojddfkpgkljpfnnfcklj` is the value captured from the Step# 2
-
现在使用
javascript
将标头添加到请求中
.
((Javascript)driver).executeScript(
"localStorage.setItem('profiles', JSON.stringify([ title: 'Selenium', hideComment: true, appendMode: '',
headers: [
enabled: true, name: 'token-1', value: 'value-1', comment: '',
enabled: true, name: 'token-2', value: 'value-2', comment: ''
],
respHeaders: [],
filters: []
]));");
其中token-1
、value-1
、token-2
、value-2
是要添加的请求标头和值。
现在导航到所需的网络应用程序。
driver.get("your-desired-website");
【讨论】:
这对我不起作用。设置后,当我在浏览器上打开扩展时,标题不显示。我也相信扩展不会将我通过 UI(扩展)输入的值存储在本地存储中以上是关于如何向使用 Selenium Webdriver 处理的 HTTP 请求添加标头或参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 在 selenium webdriver 中打开新选项卡,或者如何使用 selenium webdriver 使用动作类在 selenium 中按 ctrl + T [重复]
如何使用selenium webdriver来判断一个网页加载完毕
Selenium & webdriver.io 如何使用 executeScript?