是否可以使用 Protractor 运行 带有普通 Chrome 浏览器实例的隐身模式?

Is it possible to run an incognito with normal Chrome browser instance with Protractor?

我需要 运行 在两个具有相同视图但使用不同用户登录的浏览器中进行测试。由于 Chrome 中多个 windows 之间的共享 cookie,服务器正在更改 cookie 并注销第一个用户,因此我无法 运行 测试。所以,我想知道是否可以同时 运行 一个 Chrome 普通实例和一个隐身实例。

另一种选择是 运行 Chrome 和 Firefox 实例,但我需要控制对每个浏览器的操作。

您可以使用两个浏览器。 运行 一个脚本,用于找出您所在的浏览器,然后根据该脚本让不同的用户登录。 首先,获取浏览器,这里有一个脚本:

browser.getCapabilities()
.then(function(s) {

var platform = s.caps_.platform,
    browserName = s.caps_.browserName,
    browserVersion = s.caps_.version,
    shortVersion = browserVersion.split('.')[0],
    ie = /i.*explore/.test(browserName),
    ff = /firefox/.test(browserName),
    ch = /chrome/.test(browserName),
    sa = /safari/.test(browserName),
    shortName;

if (ie) {
    shortName = 'ie';
} else if (ff) {
    shortName = 'ff';
} else if (ch) {
    shortName = 'ch';
} else if (sa) {
    shortName = 'sa';
} else {
    throw new Exception('Unsupported browser: '+ browserName);
}

// Returns one of these: ['ch', 'ff', 'sa', 'ie']
browser.getShortBrowserName = function() {
    return shortName;
};

// Returns one of these: ['ch33', 'ff27', 'sa7', 'ie11', 'ie10', 'ie9']
browser.getShortNameVersionAll = function() {
    return shortName + shortVersion;
};

// Returns one of these: ['ch', 'ff', 'sa', 'ie11', 'ie10', 'ie9']
browser.getShortNameVersion = function() {
    if (ie) {
        return shortName + shortVersion;
    } else {
        return shortName;
    }
};

// Return if current browser is IE, optionally specifying if it is a particular IE version
browser.isIE = function(ver) {
    if (!ver) {
        return ie;
    } else {
        return ie && ver.toString() === shortVersion;
    }
};

browser.isSafari = function() {
    return sa;
};

browser.isFirefox = function() {
    return ff;
};

// Return if current browser is Chrome, optionally specifying if it is a particular Chrome version
browser.isChrome = function(ver) {
    if (!ver) {
        return ch;
    } else {
        return ch && ver.toString() === shortVersion;
    }
};

那么你需要一个函数来知道登录哪个用户:

global.getUserAndPassword = function getUser() {

var rv_user = process.env.PROTRACTOR_USER;

if (browser.isFireFox() && typeof process.env.PROTRACTOR_USER_2 !== 'undefined') {
  rv_user = process.env.PROTRACTOR_USER_2;
}

return [rv_user, process.env.PROTRACTOR_PASSWORD];

};

然后是登录功能:

global.loginFn = function loginFn() {
 var user_and_pass = getUserAndPassword();

 username.sendKeys(user_and_pass[0]);
 password.sendKeys(user_and_pass[1]);
 login.click();
};