视频没有以 geckodriver 开头

Video does not start with geckodriver

我正在使用自动化测试,我正在尝试为多个环境中的 运行ning 测试设置 selenium 网格。

我已经在 Mac OS X 10.11 和 Windows10 中成功地 运行 测试了 chrome 驱动程序。

现在,当我尝试 运行 测试功能时,在带有视频元素的页面中,在 firefox (geckodriver) 上提示以下消息:

Firefox is installing components needed to play audio or video, please try again later 视频没有开始。

我在 selenium 网格的 Hub(Mac OS X) 和 Node(Windows 10) 上 运行ning selenium standalone。

我已尝试创建配置文件并将其导入节点配置 (windowsNodeConfig.json):

{
"capabilities": [
    (...)
    {
        "browserName": "firefox",
        "maxInstances": 5,
        "platform": "WINDOWS",
        "marionette": true,
        "acceptInsecureCerts": true,
        "webdriver.gecko.driver": "geckodriver.exe",
        "firefox_profile": "firefoxProfile"
    }
    (...)
],
"nodeTimeout": 180000,
"browserTimeout": 180,
"timeout": 180,
"newSessionWaitTimeout": 180,
"cleanUpCycle": 5000,
"firefoxProfileTemplate": "firefoxProfile"
}

版本: 独立硒:3.4.0
壁虎驱动程序:0.16.1
火狐(Windows):53.0.3

我运行如下设置节点:

$ java -jar selenium-server-standalone-3.4.0.jar -role node -nodeConfig windowsNodeConfig.json -hub http://<IP_ADDRESS>:4444

运行 Hub如下:

$ java -jar selenium-hub/selenium-server-standalone-3.4.0.jar -role hub

我创建的 firefox 配置文件安装了 Widevine 内容解密模块 插件。但是在节点日志上我可以看到以下行:

JavaScript error: resource://gre/modules/AddonManager.jsm, line 2570: NS_ERROR_NOT_INITIALIZED: AddonManager is not initialized

相同的测试特征 运行s 在 chrome.

我已经创建了 firefox 配置文件,如下所述: https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles#w_creating-a-profile

我是否缺少任何配置?

问题提出后,方法发生了变化,现在这三个对我有用:

  1. 只需修改自动生成的临时 FF 配置文件首选项,让它下载插件并启用播放:

    import { Builder } from 'selenium-webdriver';
    import firefox from 'selenium-webdriver/firefox';
    
    const driver = new Builder()
      .withCapabilities({
        browserName: 'firefox',
        ...,
      })
      .setFirefoxOptions(
        new firefox.Options()
          .setPreference('media.eme.enabled', true)
          .setPreference('media.gmp-manager.updateEnabled', true),
      )
      .build();
    

    这每次都会下载插件,但仍然很快。无需在每次测试前复制配置文件以防止 cache/cookies/storage... 结转,如果您进行远程测试,则无需通过网络传输配置文件。

    如果有时无法设置 FF 首选项(例如在 BrowserStack 上),您可以通过较低级别的方法尝试相同的方法:

    import { Builder } from 'selenium-webdriver';
    
    const builder = new Builder()
      .withCapabilities({
        browserName: 'firefox',
        ...,
        'moz:firefoxOptions': {
          prefs: {
            'media.eme.enabled': true,
            'media.gmp-manager.updateEnabled': true,
          },
        },
      })
      .build();
    
  2. 创建您的自定义配置文件,打开它,安装 OpenH264 视频编解码器Widevine 内容解密模块 插件(去到视频页面,FF 会这样做),关闭它,删除不需要的文件(除 gmp-gmpopenh264gmp-widevinecdmprefs.jstimes.json 似乎可以删除)并设置您的脚本以在每个 Selenium [= 之前​​复制配置文件66=](以防止结转)。配置文件可以通过以下方式使用:

    import { Builder } from 'selenium-webdriver';
    
    const driver = new Builder()
      .withCapabilities({
        browserName: 'firefox',
        ...,
        'moz:firefoxOptions': { args: ['-profile', './path/to/firefoxProfile'] }
      })
      .build();
    

    这样(args: ['-profile') FF 被告知从文件系统加载配置文件,有一些含义。这在 BrowserStack 上对我不起作用(不能同时提供 --profile 参数和配置文件)。

  3. 以与 2. 相同的方式创建配置文件,并通过以下方式加载:

    import { Builder } from 'selenium-webdriver';
    import firefox from 'selenium-webdriver/firefox';
    
    const driver = new Builder()
      .withCapabilities({
        browserName: 'firefox',
        ...,
      })
      .setFirefoxOptions(
        new firefox.Options()
          .setProfile('./path/to/firefoxProfile'),
      )
      .build();
    

    配置文件通过这种方式被压缩和编码,因此 FF 将其作为字符串获取。

      1. ...FF 配置文件可以通过编程方式创建,因此还有一些选项可以避免在 2 中手动创建。我没有尝试过这些。