如何访问Protroctor测试的chromedriver日志

时间:2015-07-27 20:37:33

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

我已经看到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我尝试添加以下内容(包括和不包含--)但没有明显效果:

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

我也试过指定一个绝对路径(log-path=/chromedriver.log),这也是行不通的。

7 个答案:

答案 0 :(得分:8)

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

量角器配置:

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

仓/ 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}" "$@"

答案 1 :(得分:7)

你总是可以在一个单独的过程中启动你自己的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'],
   };

答案 2 :(得分:5)

根据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"
        ]
    }
},

另见:

答案 3 :(得分:3)

因为,@ 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/;对于已安装 Git 的Windows Server 2012或任何Windows操作系统,您已在bash.exe或{{1}处安装了sh.exeC:\Program Files\Git\usr\bin } 已经 )
  2. 安装bash - 对于Windows 7 /下载并将zip文件解压缩到目录。
  3. 下载C:\Program Files (x86)\Git\usr\binhttps://stedolan.github.io/jq/)并将其安装在与jq相同的目录位置
  4. 确保将上面的目录(对于Windows 7,您将bash zip文件解压缩到;对于其他适用的具有git的操作系统,安装它的路径)添加到PATH系统环境变量中。
  5. 安装完上述内容并将其添加到PATH后,请关闭所有并重新打开Webstorm以及您希望运行的所有CMD窗口。
  6. 只需在Windows命令提示符下键入bash,即可测试bash C:\git\> bash。 这样做会产生像这样的bash cmd提示符 bash$
  7. 步骤2:添加自定义文件以将Chromedriver重定向到用户Debug Logging

    将以下文件添加到项目的顶层(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驱动程序输出任何日志信息,它将显示在项目下chromedriver.???.log目录中名为tmp的文件中。

    重要提示

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

    希望有所帮助。

答案 4 :(得分:2)

如果您正在使用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 :(得分:1)

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

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

答案 6 :(得分:0)

我正在使用它作为全局的afterEach挂钩(mocha):

import com.ning.http.client.AsyncHttpClient
import com.ning.http.client.multipart.FilePart

AsyncHttpClient myClient = ws.getUnderlying();
FilePart myFilePart = new FilePart("myFile", new java.io.File("test.txt"))
myClient.preparePut("http://localhost:9000/index").addBodyPart(filePart).execute.get()