我已经看到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 below和protractor's browser setup docs我尝试添加以下内容(包括和不包含--
)但没有明显效果:
capabilities: {
browserName: "chrome",
chromeOptions: {
args: [
"--verbose",
"--log-path=chromedriver.log"
]
}
}
我也试过指定一个绝对路径(log-path=/chromedriver.log
),这也是行不通的。
答案 0 :(得分:8)
我们使用shell脚本添加chromedriver日志记录以及其他检查。然后,您可以在shell脚本中指定量角器:
// When running chromedriver, use this script:
chromeDriver: path.resolve(topdir, '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}" "$@"
答案 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 code,chromedriver
服务在没有任何参数的情况下启动,没有直接的方法来配置参数。即使量角器使用的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用户的有效解决方案。
bash.exe
或{{1}处安装了sh.exe
和C:\Program Files\Git\usr\bin
} 已经
)C:\Program Files (x86)\Git\usr\bin
(https://stedolan.github.io/jq/)并将其安装在与jq
相同的目录位置bash
,即可测试bash
C:\git\> bash
。
这样做会产生像这样的bash cmd提示符
bash$
将以下文件添加到项目的顶层(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
文件的位置相同。
在protractor.conf.js
文件中,将以下行添加为exports.config对象中的属性。如:
exports.config = {
.. ..
chromeDriver: 'chromedriver.cmd',
.. ..
现在应该运行测试,如果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.ts
或opts.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()