【问题标题】:How to access chromedriver logs for Protractor test如何访问量角器测试的 chromedriver 日志
【发布时间】:2015-10-18 05:07:11
【问题描述】:

我看到chromedriver可以输出一个日志文件(https://sites.google.com/a/chromium.org/chromedriver/logging

此页面显示了如何在直接执行 exe 时进行设置:

chromedriver.exe --verbose --log-path=chromedriver.log

我不知道如何在 Protractor 中进行设置

我现在的protractor.conf.js

require('babel/register');

exports.config = {
    framework: 'jasmine2',
    seleniumServerJar: './node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar'
};

@alecxe's answer belowprotractor's browser setup docs 我尝试添加以下内容(有和没有--s)但没有明显效果:

    capabilities: {
        browserName: "chrome",
        chromeOptions: {
            args: [
                "--verbose",
                "--log-path=chromedriver.log"
            ]
        }
    }

我还尝试指定一个绝对路径 (log-path=/chromedriver.log),但也没有用。

【问题讨论】:

标签: javascript google-chrome selenium selenium-webdriver protractor


【解决方案1】:

根据protractor's source codechromedriver 服务是在没有任何参数的情况下启动的,没有直接的方法来配置参数。尽管量角器使用的chromedriver's Service Builder 实际上具有指定详细程度和日志路径的能力:

var service = new chrome.ServiceBuilder()
    .loggingTo('/my/log/file.txt')
    .enableVerboseLogging()
    .build();

旧的(不正确的)答案:

您需要设置 chrome 参数

capabilities: {
    browserName: "chrome",
    chromeOptions: {
        args: [
            "verbose", 
            "log-path=chromedriver.log"
        ]
    }
},

另见:

【讨论】:

  • 在您引用的答案中, browserName 在功能对象之外。这两种方法似乎都不适合我。链接答案方法导致Target browser must be a string, but is <object>; did you forget to call forBrowser()
  • This page 似乎同意你的方法(减去 args 数组中的--s),但对我来说仍然没有明显的效果:(
  • @ZachL 好的,你能发布你当前的配置吗?另外,您是否尝试过指定日志文件的绝对路径?...谢谢!
  • @ZachL 是的,恐怕args 用于设置chrome 命令行开关peter.sh/experiments/chromium-command-line-switches 而不是chromedriver 命令行参数。我会更多地研究它。谢谢。
  • @ZachL 我添加了包含更多信息的更新。我认为你接下来应该做的是在量角器的 bugtracker 上创建一个问题。请把链接放在这里,以便我订阅。谢谢!
【解决方案2】:

我们使用 shell 脚本来添加 chromedriver 日志记录以及其他检查。然后,您可以将量角器指向 shell 脚本:

量角器配置:

// When running chromedriver, use this script:
chromeDriver: path.resolve(topdir, 'bin/protractor-chromedriver.sh'),

bin/protractor-chromedriver.sh

TMPDIR="/tmp"
NODE_MODULES="$(dirname $0)/../node_modules"
CHROMEDRIVER="${NODE_MODULES}/protractor/selenium/chromedriver"
LOG="${TMPDIR}/chromedriver.$$.log"

fatal() {
    # Dump to stderr because that seems reasonable
    echo >&2 "$0: ERROR: $*"
    # Dump to a logfile because webdriver redirects stderr to /dev/null (?!)
    echo >"${LOG}" "$0: ERROR: $*"
    exit 11
}


[ ! -x "$CHROMEDRIVER" ] && fatal "Cannot find chromedriver: $CHROMEDRIVER"

exec "${CHROMEDRIVER}" --verbose --log-path="${LOG}" "$@"

【讨论】:

  • protractor-chromedriver.sh 文件去哪了?
  • 在评论中回答我自己的查询:我将 protractor-chromedriver.sh 放在与 protractor.conf.js 相同的目录中
  • 问题是原来的问题是基于Windows系统的,它不允许这个带有bash shell代码的解决方案运行。您有使用 BAT 文件的解决方案吗?
  • 感谢@P.T. 的出色工作。 ...我扩展了您的解决方案并使其适用于 Windows 7(出现在下方)...
【解决方案3】:

您始终可以在单独的进程中启动自己的 chromedriver 实例,并告诉 Protractor 连接到该实例。例如,如果您使用以下命令启动 chromedriver:

chromedriver --port=9515 --verbose --log-path=chromedriver.log

然后你可以像这样使用 Protractor 的配置文件:

   exports.config = {
     seleniumAddress: 'http://localhost:9515',
     capabilities: {
       'browserName': 'chrome'
     },
     specs: ['example_spec.js'],
   };

【讨论】:

    【解决方案4】:

    如果您使用seleniumServerJar,请在protractor.conf.js 中将日志文件路径设置为您希望它写入文件的任何位置:

    seleniumArgs: [
        '-Dwebdriver.chrome.logfile=/home/myUsername/tmp/chromedriver.log',
    ]
    

    如果您使用 webdriver-manager start 运行本地 selenium 服务器,则需要编辑 webdriver-manager 文件:

    // insert this line
    args.push('-Dwebdriver.chrome.logfile=/home/myUsername/tmp/chromedriver.log');
    
    // this line already exists in webdriver-manager, add the push to args before this line
    var seleniumProcess = spawnCommand('java', args);
    

    【讨论】:

      【解决方案5】:

      我将其用作全局 afterEach 钩子 (mocha):

      afterEach(() => {
          browser.manage().logs().get('browser').then(function(browserLog) {
              if(browserLog && browserLog.length) {
                  console.log('\nlog: ' + util.inspect(browserLog) + '\n');
              }
          });
      });
      

      【讨论】:

      • util.inspect 从何而来?
      【解决方案6】:

      如果你使用webdriver-manager:webdriver manager 有chrome_logs 选项(你可以在它的源代码中找到它(在编译代码中的opts.tsopts.js),所以你可以使用它喜欢:

      webdriver-manager start --chrome_logs /path/to/logfile.txt
      

      【讨论】:

      • 您也可以通过webdriver-manager start help 找到此信息。启动帮助显示--chrome_log 有一个选项,描述为“Chrome 日志的文件路径”
      【解决方案7】:

      因为,@P.T. 的上一个回答。在 Windows 7 上对我不起作用,我从他的建议开始并让它在 Windows 上运行。这是适用于 Windows 7 用户的有效解决方案。

      第 1 步:安装 BASH 和 JQ 并确认它们在您的 Windows 机器上运行

      1. 下载 bash(适用于 Windows 10 https://itsfoss.com/install-bash-on-windows/ ;适用于 Windows 7 在这里下载最新的: https://sourceforge.net/projects/win-bash/files/shell-complete/latest/ ;对于 Windows Server 2012 或任何已安装 Git 的 Windows 操作系统,您已经在 C:\Program Files\Git\usr\binC:\Program Files (x86)\Git\usr\bin 安装了 bash.exesh.exe )
      2. 安装 bash - 对于 Windows 7/ 下载它并将 zip 文件解压缩到一个目录。
      3. 下载jqhttps://stedolan.github.io/jq/)并安装在与bash相同的目录位置
      4. 确保将上述目录(对于 Windows 7 - 您将 bash zip 文件提取到的位置;对于具有 git 的其他适用操作系统,它的安装路径)添加到您的 PATH 系统环境变量中。
      5. 安装上述内容并将其添加到您的 PATH 后,关闭所有并重新打开 Webstorm 和您希望在其中运行工作的任何 CMD 窗口。
      6. 只需在 Windows 命令提示符下键入 bash 即可测试它是否实际安装 C:\git\> bash 。 这样做应该会产生一个像这样的 bash cmd 提示符 bash$

      第 2 步:添加自定义文件以将 Chromedriver 重定向到用户调试日志

      将以下文件添加到项目的顶层(无论您的 protractor-conf.js 位于何处)。这些文件允许我们将自定义调试开关添加到 chromedriver.exe 执行中。

      请注意,这是必要的,因为这些开关不会通过量角器公开,并且不能像您通常期望的那样通过 chromeOptions/args 标志直接在 protractor.conf.js 文件中完成

      chromedriver.cmd -- 确切来源如下所示:

      bash protractor-chromedriver.sh %*
      

      protractor-chromedriver.sh -- 确切来源如下所示:

      TMPDIR="$(dirname $0)/tmp"
      NODE_MODULES="$(dirname $0)/node_modules"
      SELENIUM="${NODE_MODULES}/protractor/node_modules/webdriver-manager/selenium"
      UPDATECONFIG="${SELENIUM}/update-config.json"
      EXEFILENAME="$(cat ${UPDATECONFIG} | jq .chrome.last | tr -d '""')"
      CHROMEDRIVER="${SELENIUM}/${EXEFILENAME##*'\\'}"
      LOG="${TMPDIR}/chromedriver.$$.log"
      
      fatal() {
          # Dump to stderr because that seems reasonable
          echo >&2 "$0: ERROR: $*"
          # Dump to a logfile because webdriver redirects stderr to /dev/null (?!)
          echo >"${LOG}" "$0: ERROR: $*"
          exit 11
      }
      
      
      [ ! -x "$CHROMEDRIVER" ] && fatal "Cannot find chromedriver: $CHROMEDRIVER"
      
      exec "${CHROMEDRIVER}" --verbose --log-path="${LOG}" "$@"
      

      /tmp -- 在项目的顶层创建此目录(与protractor.conf.js 文件的位置相同。

      第 3 步:更新 protractor.conf.js 文件。

      protractor.conf.js 文件中,将以下行添加为exports.config 对象中的属性。如:

      exports.config = {
      .. ..
              chromeDriver: 'chromedriver.cmd',
      .. ..
      

      第 4 步:启动测试

      您的测试现在应该运行,如果 chrome 驱动程序输出任何日志信息,它将出现在您项目下 tmp 目录中名为 chromedriver.???.log 的文件中。

      重要提示

      此脚本设置假定您在项目的本地 node_modules 目录中安装并运行量角器(及其下的 chrome 驱动程序)。这就是我运行代码的方式,因为我希望它在构建过程/周期中完全独立并重新生成。如果您已全局安装 protractor/chromedriver,则应更改 protractor-chromedriver.sh 文件中的 CHROMEDRIVER 变量以匹配您安装的 protractor/chrome 驱动程序。

      希望有帮助。

      【讨论】:

        猜你喜欢
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-03
        相关资源
        最近更新 更多