如何从 Protractor 中包含的文件导航?
How do I navigate from an included file in Protractor?
我已经完成了这个 SO 问题中提到的操作,将一个文件包含到我的量角器测试中:How to reuse code in Protractor / AngularJS Testing。问题是从包含的代码内部调用的方法对我看到的浏览器 window 没有影响。
我在一个单独的文件中创建了一个登录方法并将其包含在内,但是当我从我的量角器测试中调用该方法时,打开的浏览器只在那里停留几秒钟然后继续,就好像我没有调用任何东西一样。我可以验证是否正在使用 console.log 调用该方法。下面是我的代码文件。
login.js,自带登录功能:
exports.login = function ()
{
console.log("Login method called");
it('logs in', function () {
browser.get('http://my-url.com/login/');
// log in to continue with checkout
element(by.xpath('//*[@id="login-form"]/div[1]/input')).sendKeys("username");
element(by.xpath('//*[@id="login-form"]/div[2]/input')).sendKeys("password");
element(by.xpath('//*[@id="login-form"]/div[3]/button')).click();
// login functions on timeout
browser.driver.sleep(1000);
});
}
conf.js,量角器配置文件:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: [/*'specs/overview.js',*/ 'specs/shopping-cart-state.js', 'specs/checkout-state.js', 'specs/buy-item.js'],
onPrepare: function () {
var SpecReporter = require('jasmine-spec-reporter');
// add jasmine spec reporter
jasmine.getEnv().addReporter(new SpecReporter({ displayStacktrace: 'all' }));
protractor.login = require('./login.js');
},
jasmineNodeOpts: {
print: function () { },
defaultTimeoutInterval: 5000000
}
};
spec.js,测试规格:
describe('Log in with an included function', function () {
it('logs in', function () {
protractor.login.login();
browser.driver.sleep(5000);
});
});
即使我将浏览器对象作为参数传递给登录函数,仍然没有任何反应,也没有收到任何错误消息。谁能告诉我我做错了什么?
不要将您的逻辑包装在 "login" 模块的 it()
中:
exports.login = function ()
{
this.login = function () {
console.log("Login method called");
browser.get('http://my-url.com/login/');
// log in to continue with checkout
element(by.xpath('//*[@id="login-form"]/div[1]/input')).sendKeys("username");
element(by.xpath('//*[@id="login-form"]/div[2]/input')).sendKeys("password");
element(by.xpath('//*[@id="login-form"]/div[3]/button')).click();
// login functions on timeout
browser.driver.sleep(1000);
};
}
我已经完成了这个 SO 问题中提到的操作,将一个文件包含到我的量角器测试中:How to reuse code in Protractor / AngularJS Testing。问题是从包含的代码内部调用的方法对我看到的浏览器 window 没有影响。
我在一个单独的文件中创建了一个登录方法并将其包含在内,但是当我从我的量角器测试中调用该方法时,打开的浏览器只在那里停留几秒钟然后继续,就好像我没有调用任何东西一样。我可以验证是否正在使用 console.log 调用该方法。下面是我的代码文件。
login.js,自带登录功能:
exports.login = function ()
{
console.log("Login method called");
it('logs in', function () {
browser.get('http://my-url.com/login/');
// log in to continue with checkout
element(by.xpath('//*[@id="login-form"]/div[1]/input')).sendKeys("username");
element(by.xpath('//*[@id="login-form"]/div[2]/input')).sendKeys("password");
element(by.xpath('//*[@id="login-form"]/div[3]/button')).click();
// login functions on timeout
browser.driver.sleep(1000);
});
}
conf.js,量角器配置文件:
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: [/*'specs/overview.js',*/ 'specs/shopping-cart-state.js', 'specs/checkout-state.js', 'specs/buy-item.js'],
onPrepare: function () {
var SpecReporter = require('jasmine-spec-reporter');
// add jasmine spec reporter
jasmine.getEnv().addReporter(new SpecReporter({ displayStacktrace: 'all' }));
protractor.login = require('./login.js');
},
jasmineNodeOpts: {
print: function () { },
defaultTimeoutInterval: 5000000
}
};
spec.js,测试规格:
describe('Log in with an included function', function () {
it('logs in', function () {
protractor.login.login();
browser.driver.sleep(5000);
});
});
即使我将浏览器对象作为参数传递给登录函数,仍然没有任何反应,也没有收到任何错误消息。谁能告诉我我做错了什么?
不要将您的逻辑包装在 "login" 模块的 it()
中:
exports.login = function ()
{
this.login = function () {
console.log("Login method called");
browser.get('http://my-url.com/login/');
// log in to continue with checkout
element(by.xpath('//*[@id="login-form"]/div[1]/input')).sendKeys("username");
element(by.xpath('//*[@id="login-form"]/div[2]/input')).sendKeys("password");
element(by.xpath('//*[@id="login-form"]/div[3]/button')).click();
// login functions on timeout
browser.driver.sleep(1000);
};
}