5

我想优化我的 WebdriverIO 测试。当我使用 WebdriverIO 运行测试套件时,我试图避免重新输入用户名和密码。(铬驱动程序

以下两个文件是一个模块的一部分,总共有4个模块。

第一个功能文件:

var name = 'Andrea' + Math.floor((Math.random() * 1000000) + 1);
var ssn = 'V-' + Math.floor((Math.random() * 1000000) + 1);
var url = 'http://someurl.com';
var new_contact = 'https://someurl.com/client/add';

describe('Some contact is create', function() {

  it('Should login to the system', function() { 
    browser.url(url)
    browser.setValue('#email','xxxxxxxx@xxxx.com') 
    browser.setValue('#password','xxxxxx') 
    browser.click('#submit');
  });

  it('Should be fill the form', function() {
    browser.url(new_contact)
    browser.waitForVisible('#addClient')
    browser.setValue('#clientNameTextField-inputEl',name)
    browser.setValue('#clientIdentidicationTextField-inputEl',ssn)
    browser.setValue('#clientAddressTextField-inputEl','El busque')
    browser.setValue('#clientCicyyTextField-inputEl','Valencia')
    browser.setValue('#clientEmailField-inputEl','salvador.salvatierra@alegra.com')
    browser.setValue('#clientPhoneTextField-inputEl','04141234567')
    browser.setValue('[name="phone2"]','04147654321')       
  });

  it('the contact is store',function() {        
    browser.click('=save)
    browser.waitForExist('#viewClientInfoBalances')
    browser.end;
  });
});

 });

第二个特征文件:

var url = 'http://someurl.com';

describe('We get the basic info from index contact', function(){

    it('Shouldlogin to the system', function(){ 
    browser.url(url)
    browser.setValue('#email','xxxxxxxx@xxx.com') 
    browser.setValue('#password','xxxxx') 
    browser.click('#submit');
    });

    it('We should see the basic info', function(){
    browser.click('[href="/client"]')
    browser.click('#gridview-1043-record-ext-record-66 .action-icons a:nth-child(1)')
    browser.waitForExist('#viewClientInfoBalances')
    browser.end();          
    });
});
4

1 回答 1

7

我看到了三种不同方法的可能解决方案:

1. 创建登录设置:

既然我看到你正在使用Mocha,那么我会在你所有的测试用例之前运行你的登录片段.before()

describe("StackOverflow Test Suite", function() {

        before(function() {
            return browser
                .url(url);
                .setValue('#email','xxxxxxxxxxx@xxxx.com') 
                .setValue('#password','xxxxxxxx') 
                .click('#submit');
        });

        it("\nYour first test...\n", function() {
            return ...
        });

        it("\nYour second test...\n", function() {
            return ...
        });
}); 

Obs:每个测试套件的.before()钩子只会运行一次。如果您有不同的测试套件(describe语句),每个测试用例都需要登录,那么使用.beforeEach()钩子。


更新 !!!根据萨尔瓦多的要求,在评论部分添加了这部分。

您有两种方法可以实现这一目标:

  • 将您的登录wdio.config.js beforeSuite移到钩子中:

    // Hook that gets executed before the suite starts
     beforeSuite: function (suite) {
        return browser
                .url(url);
                .setValue('#email','xxxxxxxxxxx@xxxx.com') 
                .setValue('#password','xxxxxxxx') 
                .click('#submit');
     },
    
  • 创建一个main.js文件,在其中注入所有“模块”。您仅从该文件登录并describe通过其中注入所有 -populated 文件require

注射器:

function importTest(name, path) {
    describe(name, function() {
        require(path);
    });
}

主.js:

describe("All your tests go here!", function () {

    // Executes its content before each imported feature
    beforeEach(function() {
        // beforeHooks
    });

    // Imported features/module files
    importTest('Clients module', '../modules/clients.js');
    //importTest('Devices module', '../modules/devices.js');

    // Executes its content after all features have executed
    after(function () {
        // afterHooks
    });
});

2. 加载自定义配置文件:

  1. 启动您的 WebdriverIO 测试用例,但browser.debug()在加载页面后添加;
  2. 访问您的网站并使用您所需的帐户登录。确保将凭据保存在浏览器中;
  3. 现在我们必须保存这个自定义配置文件并在每次启动 WebdriverIO 测试用例时加载它。在地址栏中输入chrome://version。注意配置文件路径值。复制文件夹的内容(例如:对于C:\Users\<yourUserName>\Desktop\scoped_dir18256_17319\Default,复制您桌面上的scoped_dir18256_17319文件夹)。文件夹包含当前实例上的所有操作(搜索历史记录、安装的扩展程序、在我们的例子中保存的帐户/保存的凭据);
  4. 现在我们需要做的就是在文件中添加该文件夹的路径wdio.config.js作为chromeOptions参数:

    chromeOptions: {
        //extensions: ['./browserPlugins/Avira-SafeSearch-Plus_v1.5.1.crx'],
        args: [ '--user-data-dir=/Users/<yourUserName>/Desktop/scoped_dir18256_17319'
        ]
    }
    

现在您所要做的就是使用此自定义配置文件运行您的测试用例,您将使用您首选的用户名/密码组合登录。

Obs:您可以在此处阅读有关自定义配置文件的更多信息,使用自定义配置文件部分。


3.加载身份验证cookie(不适用于所有网站)

  1. 使用所需的用户名/密码组合登录您的网站;
  2. 打开 Chrome 控制台并转到Cookies菜单中的应用程序选项卡;
  3. 您必须识别您的身份验证令牌(通常,所有网站都将凭据等信息存储在 中cookies);
  4. 使用、 或方法添加确切的 cookie(在您加载 URL 之后)。.cookie().setCookie()

代码应如下所示:

browser.setCookie({name: '<AuthCookieName>', value: '<AuthToken>'});
browser.refresh();
// Sometimes you have to refresh twice
browser.refresh(); 
// Assert you are logged in

请参阅我给出的类似问题的答案作为示例。

希望这对您有所帮助。干杯!

于 2017-06-12T05:02:22.193 回答