使用Protractor可以使用普通的Chrome浏览器实例运行隐身吗?

时间:2015-05-13 14:22:40

标签: google-chrome protractor selenium-chromedriver

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

另一种选择是运行Chrome和Firefox实例,但我需要控制如何处理每个浏览器。

1 个答案:

答案 0 :(得分:2)

您可以使用两种浏览器。运行脚本以找出您所在的浏览器,然后根据具体情况让不同的用户进行记录。 首先,获取浏览器,这是一个脚本:

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();
};