Protractor 如何在每次在量角器中打开浏览器时访问onPrepare中的函数

Protractor 如何在每次在量角器中打开浏览器时访问onPrepare中的函数,protractor,Protractor,我正在使用量角器cucumber框架(量角器5.2.2和cucumber 3.2.0)。我需要使用多个用户凭据登录。因此,我需要使用incognito窗口。因此,我在配置文件中进行了如下设置 capabilities: { 'browserName': 'chrome', chromeOptions: { args: ["--incognito"] } }, onPrepare: function() { browser.ignoreSynchronization = true;

我正在使用量角器cucumber框架(量角器5.2.2和cucumber 3.2.0)。我需要使用多个用户凭据登录。因此,我需要使用incognito窗口。因此,我在配置文件中进行了如下设置

capabilities: {
'browserName': 'chrome',
 chromeOptions: {
    args: ["--incognito"]
 }
},
onPrepare: function() {
 browser.ignoreSynchronization = true;
 browser.manage().window().maximize();
 global.testdata = require('./support/testdata.js');
}
我补充说

browser.restart();
每次注销代码后。但当我打开新的匿名窗口时,我无法访问onPrepare函数中的代码。下面给出了我的onPrepare函数

capabilities: {
'browserName': 'chrome',
 chromeOptions: {
    args: ["--incognito"]
 }
},
onPrepare: function() {
 browser.ignoreSynchronization = true;
 browser.manage().window().maximize();
 global.testdata = require('./support/testdata.js');
}

因此,我如何在每次打开浏览器时访问onPrepare函数中的代码。请提前感谢。

Node.js基于单线程的
javascript
语言。因此,打开浏览器的每个测试都在单独的过程中运行,这就是为什么您不需要
匿名
模式。问题是如何在不同用户之间共享多个测试。最简单的方法是:

  • 在具有不同用户凭据的项目根目录中以及在测试
    beforeAll()
    get credentials中创建一个文件,并从文件中删除此行。在测试结束时,返回它

  • 您可以使用简单的API创建一个服务器来获取不同的凭据,并在测试中使用它。 正如你所看到的,这有点复杂

您可以将
onPrepare()
中的代码包装到函数中,然后将函数导出到
.js
文件中

// onPrepare.js, move the codes in `onPrepare()` at here  
module.exports = function onPrepareConfig() {
    browser.ignoreSynchronization = true;
    browser.manage().window().maximize();
    global.testdata = require('./support/testdata.js');
}


// protractor conf.js       
onPrepare: function() {
    // you need to import `onPrepare.js` within this function
    // because the variable `browser` we used in `onPrepare.js`
    // are available inside `onPrepare()`

    var onPrepareConfig = require('./onPrepare.js');
    onPrepareConfig();
}


// the code line where you call browser.restart();
browser.restart();
var onPrepareConfig = require('./onPrepare.js');
onPrepareConfig();

谢谢你的回复。但是我需要使用incognito窗口,因为我们的应用程序会像Gmail一样保存用户名。我正在从数据库获取用户凭据。我正在输入一个数据表(包含多个用户的数据)通过将每行数据循环到我们的应用程序。因此,我的功能文件中只有一个步骤,StepDefension文件中只有一个函数,在这个函数中,我需要以不同的用户身份注销和登录。这样我就不能使用beforeAll()。我不知道有一些限制。但您的每个测试都有:登录、测试、注销。所以这应该是在测试中!您应该以某种方式放置不同的凭据(总是下一行)。