会话未在Protractor中为chrome创建例外

SMP*_*MPH 10 selenium-chromedriver selenium-webdriver typescript protractor

尝试针对chrome运行Protractor测试时,我得到以下错误.

我的承诺

import {Config} from 'protractor'

export let config: Config = {
    framework: 'jasmine',
    // capabilities: { browserName: 'chrome'},
    multiCapabilities: [
        // {browserName: 'firefox'},
        {
            browserName: 'chrome',
            chromeOptions: {
                args: ['--start-maximized']
            },

        }],

    seleniumAddress: 'http://127.0.0.1:4444/wd/hub',
    seleniumPort: null,
    seleniumArgs: [],
    specs: [
        './Protractor/Login/*.spec.js',
Run Code Online (Sandbox Code Playgroud)

错误:

Protractor conf.js
[17:19:07] I/hosted - Using the selenium server at http://127.0.0.1:4444/wd/hub
[17:19:07] I/launcher - Running 1 instances of WebDriver
[17:19:09] E/launcher - session not created exception
from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData":{"frameId":"8800.1","isDefault":true},"id":1,"name":"","origin":"://"}
  (Session info: chrome=54.0.2840.59)
  (Driver info: chromedriver=2.22.397933 (1cab651507b88dec79b2b2a22d1943c01833cc1b),platform=Windows NT 6.3.9600 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 1.07 seconds
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03'
System info: host: 'MAL000009416062', ip: '192.168.1.4', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_73'
Driver info: org.openqa.selenium.chrome.ChromeDriver
[17:19:09] E/launcher - SessionNotCreatedError: session not created exception
from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData":{"frameId":"8800.1","isDefault":true},"id":1,"name":"","origin":"://"}
  (Session info: chrome=54.0.2840.59)
  (Driver info: chromedriver=2.22.397933 (1cab651507b88dec79b2b2a22d1943c01833cc1b),platform=Windows NT 6.3.9600 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 1.07 seconds
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03'
System info: host: 'MAL000009416062', ip: '192.168.1.4', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_73'
Driver info: org.openqa.selenium.chrome.ChromeDriver
    at WebDriverError (C:\Users\392811\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:27:5)
    at SessionNotCreatedError (C:\Users\392811\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:308:5)
Run Code Online (Sandbox Code Playgroud)

conf.ts

multiCapabilities: [

        {
            browserName: 'chrome',
            chromeOptions: {
                args: ['--start-maximized']
            },

        }],
Run Code Online (Sandbox Code Playgroud)

网上的大部分讨论都是围绕版本进行的.我目前正在使用最新版本

有什么线索吗?

干杯

Sud*_*raj 13

您可以通过更改Protractor的config.json文件来更改webdriver-manager下载的chromedriver的版本...

  1. 编辑量角器的配置文件:node_modules/protractor/config.json
  2. 将Chrome驱动程序版本更改为您需要的任何版本.例如."chromedriver":"2.24".
  3. 运行webdriver-manager更新.

从您发布的错误中,量角器未使用最新的chrome驱动程序版本.在堆栈跟踪中,它显示的是Chrome驱动程序版本2.21.


teh*_*one 7

我还没有足够的代表在Sudharsan的回答下发表评论,但是他告诉你要修改的配置文件的位置实际上是

node_modules/protractor/node_modules/webdriver-manager/config.json
Run Code Online (Sandbox Code Playgroud)

这不是量角器tsconfig,而是config.json要修改的webdriver-manager .

话虽如此,我之前遇到过这个问题并采取了不同的方法来解决它.如果您只需要安装一次,Sudharsan提供的解决方案就可以使用.我们的构建在TFS中运行,它清理构建代理工作目录并在每个构建上提供一个新的repo.更改webdriver配置在这种情况下不起作用,因为我们npm install在每次构建之前都做了所有事情.在这种情况下,它总是会恢复到较旧版本的chromedriver.

我所做的是将chromedriver添加到我的devDependencies中package.json然后我删除了webdriver-manager安装的chromedriver版本,并将chromedriver的更新版本移动到正确的位置并使用gulp任务.所以在package.json中我将它列在devDependencies下:

"chromedriver": "~2.24.1"
Run Code Online (Sandbox Code Playgroud)

然后我有一个gulp任务删除并移动这样的文件:

var gulp = require('gulp');
var del = require('del');

var chromeDriverFilesToMove = [
    './node_modules/chromedriver/lib/chromedriver/**'
];

var chromeDriverFilesToDelete = [
    './node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver*.exe',
    './node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver*.zip'
];

gulp.task('delete-chromedriver', function() {
    return del(chromeDriverFilesToDelete);
});

gulp.task('move-chromedriver', function() {
    gulp.src(chromeDriverFilesToMove)
        .pipe(gulp.dest('node_modules/protractor/node_modules/webdriver-manager/selenium/'));
});

gulp.task('chromedriver-update', ['delete-chromedriver', 'move-chromedriver']);
Run Code Online (Sandbox Code Playgroud)

并且因为量角器仍然会寻找在运行时安装的旧版chromedriver,webdriver-manager update你必须告诉它在哪里寻找chromedriver.exe所以将它添加到你的量角器conf.js它应该开始工作.

chromeDriver: "../node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver.exe",
Run Code Online (Sandbox Code Playgroud)

有点愚蠢,我们必须经历所有这些麻烦才能让它发挥作用但是chromedriver 2.22似乎不能与Chrome 53+一起使用.至少不符合我的经验.

TL; DR

如果您只需安装一次使用Sudharsan的解决方案(给定您修改正确的配置),它就会更容易.如果你在我的情况下,将不得不连续安装量角器尝试我的解决方案.它对我来说效果很好,因此我没有遇到过这个错误.