我想优化我的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.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
文件,您可以在其中注入所有"模块"。您仅从该文件登录,并通过其中的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.加载自定义配置文件:
- 启动您的 WebdriverIO 测试用例,但在加载页面后添加
browser.debug()
; - 转到您的网站并使用所需的帐户登录。确保将凭据保存在浏览器中;
- 现在我们必须保存此自定义配置文件,并在每次启动 WebdriverIO 测试用例时加载它。在地址栏中键入chrome://version。请注意"配置文件路径">值。复制文件夹的内容(例如:对于
C:Users<yourUserName>Desktopscoped_dir18256_17319Default
,复制桌面上的scoped_dir18256_17319文件夹)。此文件夹包含此当前实例上的所有操作(搜索历史记录,已安装的扩展程序,在我们的例子中保存/保存凭据的帐户); 现在我们需要做的就是将
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(不适用于所有网站)
- 使用所需的用户名/密码组合登录您的网站;
- 打开 Chrome 控制台,然后转到Cookie菜单中的应用程序选项卡;
- 您必须识别您的身份验证令牌(通常,所有网站都存储
cookies
中的凭据等信息); - 使用
.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
请参阅我对类似问题给出的答案作为示例。
希望这对你有帮助。干杯!