当前位置: 首页 > 面试题库 >

为Selenium创建HTTP基本身份验证Chrome扩展(提供MWE)

谭志用
2023-03-14
问题内容

我正在尝试使用Google
Chrome浏览器进行selenium测试。我想使用HTTP基本身份验证登录。在Selenium中未实现,因此建议加载扩展。我正在使用来自的代码

https://github.com/RobinDev/Selenium-Chrome-HTTP-Private-
Proxy,
以及“如何使用chrome驱动程序使用Java覆盖selenium2中的基本身份验证”的答案?
我已尝试使其适应我的需求。

更新资料

查看最低工作示例。

git clone git@github.com:alexbiddle/selenium-chrome-http-basic-auth.git

摘录如下

var config = {
    mode: "fixed_servers",
    rules: {
      singleProxy: {
        scheme: "https",
        host: "subdomain.example.com"
      },
      bypassList: ["foobar.com"]
    }
  };

chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

function callbackFn(details) {
    return {
        authCredentials: {
            username: "example",
            password: "abc123"
        }
    };
}

chrome.webRequest.onAuthRequired.addListener(
        callbackFn,
        {urls: ["<all_urls>"]},
        ['blocking']
);

使用Java将其加载

ChromeOptions chromeOptions = new ChromeOptions();
File proxyPath = new ClassPathResource("proxy.zip").getFile();
chromeOptions.addExtensions(proxyPath);

DesiredCapabilities capability = DesiredCapabilities.chrome();
capability.setCapability(CAPABILITY, chromeOptions);
webDriver = new ChromeDriver(capability);

我在https://developer.chrome.com/extensions/proxy#type-
ProxyServer上仔细检查了文档,以防万一缺少某些值,但是在使用URL加载测试时

https://subdomain.example.com

它失败了

ERR_TUNNEL_CONNECTION_FAILED

我在Mac上使用Chrome。


问题答案:

该错误很可能是由于您的扩展程序定义的代理所致。

如果您需要与系统不同的扩展,则应构建不带代理的扩展,并在功能中定义代理。

要创建扩展名,只需使用username和中定义的凭据将以下文件压缩为password

manifest.json

{
  "manifest_version": 2,
  "name": "Authentication for ...",
  "version": "1.0.0",
  "permissions": ["<all_urls>", "webRequest", "webRequestBlocking"],
  "background": {
    "scripts": ["background.js"]
  }
}

background.js

var username = "my-username";
var password = "my-password";

chrome.webRequest.onAuthRequired.addListener(
  function handler(details) {    
    if (username == null)
      return {cancel: true};

    var authCredentials = {username:username, password: username};
    username = password = null;

    return {authCredentials: authCredentials};
  },
  {urls: ["<all_urls>"]},
  ['blocking']
);


 类似资料:
  • 我尝试了angular.js,并从一个restful api的web-ui开始(使用超文本传输协议基本授权)。这真的很好,除了授权工作。 到目前为止,我使用的是设置密码,但大多数情况下浏览器会打开http basic auth的默认登录表单。另一个奇怪的行为是angular请求不包含授权头(选项和GET请求都不包含)。我还尝试使用header配置在每个请求上设置此header,但这也不起作用。 有

  • 问题内容: Chrome 59 删除了对https:// user:password@example.com URL的支持 。 我有一个正在使用此功能的测试,该功能现已损坏,因此我尝试将其替换为等待身份验证弹出窗口并填写详细信息的版本。但是以下操作在Chrome上不起作用(Chrome不会将auth弹出窗口视为警报): 仅selenium版本具有相同的问题: 我可以在FireFox中看到几种解决方

  • 我正在尝试创建一个委托身份验证提供程序来执行逻辑,然后根据一些任意逻辑决定选择哪个身份验证提供程序;为了这个例子,如果用户名以前缀开头。 我当前的SecurityConfig将一次尝试一个身份验证提供程序: 根据用户名,我想选择是否要使用try a provider,这样,如果用户名不是以特定前缀(“ldap”、“custom”、“ad”等)开头,它们就不会被调用...),所以: 我似乎无法以这种

  • 问题内容: 我想写书,所使用的一个一个的NodeJS REST的API服务器Joyent的,并且一切正常,除了我无法验证普通用户的身份验证。如果我跳到终端并执行,则无法在NodeJS http服务器上获取值username:password。如果我的NodeJS http服务器类似于 ,是否应该在来自回调的 req 对象中某处获取值username:password ?如何获得这些值而不必使用Co

  • 作为自动化的一部分,我正在尝试使用selenium登录本地托管的网站。该页面提供HTTP基本身份验证弹出窗口,我使用下面的代码发送凭据。然而,在使用调试器并逐步执行代码时,我发现超时异常会反复出现(在旁边标有注释的行)。 我在Chrome浏览器及其相应的Chrome WebDriver上尝试了从79.0到最新的84.0的所有版本,但这种例外似乎在所有情况下都会发生 Windows服务器W2k12虚

  • 在浏览器中直接键入下面的url,它可以工作, 但是,当我使用相同的url,用于selenium网络驱动程序测试时,它连接到 以及请求HTTP身份验证。我是否需要更改chrome浏览器中的任何设置,或调整默认配置文件?