Javascript 在默认的NightWatch浏览器实例中启用和修改Chome扩展(特别是ModHeader扩展)

Javascript 在默认的NightWatch浏览器实例中启用和修改Chome扩展(特别是ModHeader扩展),javascript,selenium,google-chrome-extension,nightwatch.js,mod-headers,Javascript,Selenium,Google Chrome Extension,Nightwatch.js,Mod Headers,我使用的是NightWatch.js,对于一些UI测试,我想用一些额外的desiredCapabilities启动默认浏览器实例(即,使用一些应用的特定值启用扩展) 注意:我可以执行这些操作,但不能在默认浏览器实例中执行 要完全清楚,手动执行操作看起来如下所示: 扩展链接: 我可以使用存储在pageObject文件中的以下命令启用扩展名并更新值: setChromeOptions(url) { const chromeCapabilities = webdriver.Capabilities

我使用的是NightWatch.js,对于一些UI测试,我想用一些额外的desiredCapabilities启动默认浏览器实例(即,使用一些应用的特定值启用扩展)

注意:我可以执行这些操作,但不能在默认浏览器实例中执行

要完全清楚,手动执行操作看起来如下所示: 扩展链接:

我可以使用存储在pageObject文件中的以下命令启用扩展名并更新值:

setChromeOptions(url) {
  const chromeCapabilities = webdriver.Capabilities.chrome();

  // setting chrome options
  const chromeOptions = {
    args:

    // path to local ModHeader extension
    ['--load-extension=/Users/raja.bellebon/AppData/Local/Google/Chrome/User Data/Default/Extensions/idgpnmonknjnojddfkpgkljpfnnfcklj/2.1.2_0/'],
  };

  chromeCapabilities.set('chromeOptions', chromeOptions);
  const driver = new webdriver.Builder().withCapabilities(chromeCapabilities).build();
  driver.get('chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/_generated_background_page.html');

  // setup ModHeader extension with the header value
  driver.executeScript(`
    localStorage.setItem('profiles', JSON.stringify([{ /* eslint-env browser*/
      title: 'Selenium',
      hideComment: true,
      appendMode: '',
      headers: [
      { enabled: true, name: 'X-Static-Homepage', value: 'true' },
      ],
      respHeaders: [],
      filters: [],
    }]))`);
  driver.get(url);
  return this;
}
该函数在测试开始时调用(作为第一步或在
之前的
中调用)。当我执行代码时,会打开第二个浏览器窗口,并在其中执行操作。同时,主(或默认)浏览器实例没有扩展名如何在主浏览器实例中修改扩展?

在阅读了一些博客之后,我发现我可能需要修改conf.js并在那里应用我的代码,但是我无法获取/修改当前的驱动程序


我头痛得厉害。。。任何帮助都将不胜感激,谢谢

很抱歉回复晚了。我刚刚知道怎么做,所以如果你将来需要的话,我想和大家分享一下

首先,在nightwatch.json文件中,设置所需的功能,如下所示:

"desiredCapabilities": {
    "javascriptEnabled": true,
    "acceptSslCerts": true,
    "browserName": "chrome",
    "chromeOptions": {
      "args": ["--load-extension=/home/pratik/.config/google-chrome/Default/Extensions/idgpnmonknjnojddfkpgkljpfnnfcklj/2.1.2_0"]
    }
  }
然后在你的测试中

before: (client) => {
  modHeaderPage = client.page.modHeaderPage();
  modHeaderPage.setHeader();
  homePage = client.page.homePage();
}
您的页面对象如下所示:

module.exports = { 
  elements: {},
  commands: [{
    setHeader() {

      // set the context on the extension so the localStorage can be accessed
      const url = 'chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/2.1.2_0/settings.tmpl.html'; // modHeader extension
      this.navigate(url).waitForElementPresent('body', 20000);

      // setup ModHeader with header
      this.api.execute(`
        localStorage.setItem('profiles', JSON.stringify([{ /* eslint-env browser*/
          title: 'Selenium',
          hideComment: true,
          appendMode: '',
          headers: [
            { enabled: true, name: 'Header_Name', value: 'Header_Value' },
          ],
          respHeaders: [],
          filters: [],
     }]))`);
    },
  }],
};

很抱歉迟了答复。我刚刚知道怎么做,所以如果你将来需要的话,我想和大家分享一下

首先,在nightwatch.json文件中,设置所需的功能,如下所示:

"desiredCapabilities": {
    "javascriptEnabled": true,
    "acceptSslCerts": true,
    "browserName": "chrome",
    "chromeOptions": {
      "args": ["--load-extension=/home/pratik/.config/google-chrome/Default/Extensions/idgpnmonknjnojddfkpgkljpfnnfcklj/2.1.2_0"]
    }
  }
然后在你的测试中

before: (client) => {
  modHeaderPage = client.page.modHeaderPage();
  modHeaderPage.setHeader();
  homePage = client.page.homePage();
}
您的页面对象如下所示:

module.exports = { 
  elements: {},
  commands: [{
    setHeader() {

      // set the context on the extension so the localStorage can be accessed
      const url = 'chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/2.1.2_0/settings.tmpl.html'; // modHeader extension
      this.navigate(url).waitForElementPresent('body', 20000);

      // setup ModHeader with header
      this.api.execute(`
        localStorage.setItem('profiles', JSON.stringify([{ /* eslint-env browser*/
          title: 'Selenium',
          hideComment: true,
          appendMode: '',
          headers: [
            { enabled: true, name: 'Header_Name', value: 'Header_Value' },
          ],
          respHeaders: [],
          filters: [],
     }]))`);
    },
  }],
};

所选答案似乎与最新版本的Mod Headers不兼容。 现在有一个selenium版本,我尝试过使用它,但仍然不起作用,所以我所做的是:

  • 找到我的分机所在的位置:
  • 转到已安装的my extension版本:
  • 单击左上角的包扩展(可能会根据chrome版本移动)
  • 在上面写着“扩展根目录”的地方,我输入了在步骤1中找到的位置并单击了“包扩展”
  • 从步骤1中获取目录中创建的
    crx
    文件,将其移动到
    /extensions/modheader.crx
    下的my repo中(此处重命名为crx)
  • 在nightwatch.conf.js中添加了:
  • 添加了与所选答案类似的modHeaderPage:
  • 在安装文件中,我添加了:
  • 现在我可以使用扩展为我的请求添加标题。希望这将帮助其他人,花了太长的时间让它工作:D

    下侧是无头的,不适用于扩展


    所选答案似乎与最新版本的Mod Headers不兼容。 现在有一个selenium版本,我尝试过使用它,但仍然不起作用,所以我所做的是:

  • 找到我的分机所在的位置:
  • 转到已安装的my extension版本:
  • 单击左上角的包扩展(可能会根据chrome版本移动)
  • 在上面写着“扩展根目录”的地方,我输入了在步骤1中找到的位置并单击了“包扩展”
  • 从步骤1中获取目录中创建的
    crx
    文件,将其移动到
    /extensions/modheader.crx
    下的my repo中(此处重命名为crx)
  • 在nightwatch.conf.js中添加了:
  • 添加了与所选答案类似的modHeaderPage:
  • 在安装文件中,我添加了:
  • 现在我可以使用扩展为我的请求添加标题。希望这将帮助其他人,花了太长的时间让它工作:D

    下侧是无头的,不适用于扩展


    嘿,谢谢你的回答!你确定它有效吗?我记得我可以用modHeader集开始页面。但不幸的是,我打开了两个选项卡,一个是标题集,另一个是执行测试的地方…如果你只有一个选项卡,并且测试在标题集的页面内执行-很好!!!嘿,谢谢你的回答!你确定它有效吗?我记得我可以用modHeader集开始页面。但不幸的是,我打开了两个选项卡,一个是标题集,另一个是执行测试的地方…如果你只有一个选项卡,并且测试在标题集的页面内执行-很好!!!嘿,伙计,我想你救了我的命。我已经以此为基础,对量角器采用了相同的想法,效果非常好。@Farmijo你能分享一下你的量角器例子吗。我一直在努力将它添加到量角器框架中如何加载多个扩展?嘿,伙计,我想你救了我的命。我已经以此为基础,对量角器采用了相同的想法,效果非常好。@Farmijo你能分享一下你的量角器例子吗。我一直在努力将它添加到量角器框架中。如何加载多个扩展?