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



我想优化我的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('Should login 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. 创建登录设置:

由于我看到您正在使用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.jsbeforeSuite钩中移动您的登录名

    // 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文件,您可以在其中注入所有"模块"。您仅从该文件登录,并通过其中的require注入所有describe填充的文件:

注射器:

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>Desktopscoped_dir18256_17319Default,复制桌面上的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 控制台,然后转到Cookie菜单中的应用程序选项卡;
  3. 您必须识别您的身份验证令牌(通常,所有网站都存储cookies中的凭据等信息);
  4. 使用.cookie().setCookie()方法添加确切的 cookie(加载URL 后)。

代码应如下所示:

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

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

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

相关内容

  • 没有找到相关文章

最新更新