避免使用登录表单中的WebDriverIO重新输入用户/电子邮件和密码

时间:2017-06-12 04:35:03

标签: javascript selenium-webdriver selenium-chromedriver webdriver-io

我正在寻找有人告诉我当我使用chromedriver和selenium运行带有webdriverIO的Testdrive时,我怎样才能避免每次重新输入用户名和密码。我想要的是优化我的testdrive。一些线索???

这两个文件是一个模块的一部分,系统中有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();          
});

});

1 个答案:

答案 0 :(得分:4)

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

  

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()挂钩 ONLY ONCE 。如果您有不同的测试套件(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注入所有require - 填充的文件:

<强>注射器:

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

<强> main.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'
        ]
    }
    
  5. 现在,您只需使用此自定义配置文件运行测试用例,您将使用首选的用户名/密码组合登录。

    视频:您可以详细了解自定义配置文件 HERE 使用自定义配置文件部分。

      

    第3。加载身份验证Cookie (不会在所有网站上工作)

    1. 使用所需的用户名/密码组合登录您的网站;
    2. 打开Chrome控制台,转到 Cookie 菜单中的应用标签;
    3. 您必须识别您的身份验证令牌(通常,所有网站都会存储cookies中的凭据等信息);
    4. 使用.cookie().setCookie()方法添加确切的Cookie(您加载网址后)。
    5. 代码应如下所示:

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

      请参阅 THIS 回答我将一个类似的问题作为示例。

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