8

我正在使用 Selenium Webdriver 对 Web 应用程序进行单元测试。它在 JUnit 测试中使用尽管广泛阅读了可用的文档并四处搜索,但我找不到以下方法:

  • 向驱动程序传递的 HTTP 请求添加标头。
  • 为这样的请求添加参数,就好像驱动程序在提交表单后得到了他的目标 URL。

可以使用适当的表单创建一个测试网页,并让 Webdriver 反弹它以自动获取这些参数,但这是一个非常丑陋的 hack。我想避免它,特别是为了测试原子性。(这是单元测试。)

在使用 Wendriver 之前,我使用 Spring 的 MockHttpServletRequest 和 MockHttpServletResponse 来执行此操作,这很有效,但我想使用 Webdriver 的强大功能来断言目标页面的内容。

4

2 回答 2

4

您可以尝试评估 browsermob-proxy。它有助于操作标题。 https://github.com/webmetrics/browsermob-proxy。与 webdriver 集成很简单。您只需要使用设置的代理值启动驱动程序。

于 2012-05-03T11:49:18.007 回答
1

可能对正在寻找解决方案的其他人有用

这就是我解决问题的方法。希望对具有类似设置的任何人都有帮助。

  1. 将 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);
  1. 转到浏览器扩展并捕获 ModHeader 的本地存储上下文 ID

从 ModHeader 捕获 ID

  1. 导航到 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
  1. 现在使用将标头添加到请求中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是要添加的请求标头和值。

  1. 现在导航到所需的 Web 应用程序。

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

于 2020-08-11T10:38:30.227 回答