如何向使用 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-1value-1token-2value-2 是要添加的请求标头和值。

    现在导航到所需的网络应用程序。

    driver.get("your-desired-website");

【讨论】:

这对我不起作用。设置后,当我在浏览器上打开扩展时,标题不显示。我也相信扩展不会将我通过 UI(扩展)输入的值存储在本地存储中

以上是关于如何向使用 Selenium Webdriver 处理的 HTTP 请求添加标头或参数?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Selenium & webdriver.io 如何使用 executeScript?

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

使用 Selenium webdriver 等待一个元素

如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?