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

时间:2022-08-22 19:47:31

I need to run test in two browsers with the same view but logged with different users. As the server is changing the cookie and logging out the first user because of the shared cookie between multiple windows in Chrome I cannot run the test. So, I wonder if it is possible to run a Chrome normal instance and an incognito one simultaneously.

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

Another option is to run a Chrome and a Firefox instance but I need to control what to do with each browser.

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

1 个解决方案

#1


You can use two browsers. Run a script to find out which browser you are in and then have different users to log based on that. First, get the browser, here is a script for that:

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

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

then you need a function to know which user to log in:

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

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];

};

and then a login function:

然后是登录功能:

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

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

#1


You can use two browsers. Run a script to find out which browser you are in and then have different users to log based on that. First, get the browser, here is a script for that:

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

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

then you need a function to know which user to log in:

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

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];

};

and then a login function:

然后是登录功能:

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

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