Selenium 量角器e2e关于代码复杂性的测试建议
我知道我的问题会被标记为广泛的,但我没有想到另一个地方问它。我在QA工作,一个月前我开始自学量角器,这样我就可以用量角器测试我们的项目。没有人指导我,我全部是自己和谷歌学习的,所以我想让你们检查我编写的代码,并给我一些建议。它看起来是应该的,因为我认为它毫无价值,它完成了任务,但我觉得它仍然是初学者水平,没有人指导我,所以我知道我目前的水平,欢迎任何建议。我的配置文件非常基本Selenium 量角器e2e关于代码复杂性的测试建议,selenium,protractor,Selenium,Protractor,我知道我的问题会被标记为广泛的,但我没有想到另一个地方问它。我在QA工作,一个月前我开始自学量角器,这样我就可以用量角器测试我们的项目。没有人指导我,我全部是自己和谷歌学习的,所以我想让你们检查我编写的代码,并给我一些建议。它看起来是应该的,因为我认为它毫无价值,它完成了任务,但我觉得它仍然是初学者水平,没有人指导我,所以我知道我目前的水平,欢迎任何建议。我的配置文件非常基本 exports.config = { framework: 'jasmine2', seleniumAddres
exports.config = {
framework: 'jasmine2',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['page.js'],
onPrepare: function() {
var jasmineReporters = require('jasmine-reporters');
}
}
我的规范文件:
/*
##############################################
FUNCTIONS in helper_functons:
getsite();
logIn();
mainPageItem(); | 0 - Recipes | 1 - Collections | 2 - Profiles |
openRecipe(index);
createRecipe (name,description,step,numStep,ingName,numIngr,addToCollections,share);
deleteRecipe(recipeName); //must use getMainPageAndRefresh()
openRecipe(index);
browseRecipe();
openCollection(index);
createCollection(name,description);
openUser(index);
getNotifications();
goToProfile();
browseProfile();
getMainPageAndRefresh();
goToTimeline();
openLegal(index);
useSearch(textString);
createPost(postName);
logOut();
##############################################
*/
var functions = require('./helper_functions.js');
var uName = 'asd';
var pass = 'asd';
describe('Hooray',function(){
it('Gets site',function(){
functions.getSite();
});
it('Logs in ',function(){
functions.logIn(uName,pass);
});
it('Recipe options',function(){
browser.sleep(9000);
});
it('Logs out',function(){
functions.getMainPageAndRefresh();
functions.logOut();
});
});
我正在使用另一个文件,在那里我创建了助手函数,所以我的测试看起来更可读。这是我上传到pastebin上的主代码,因为它有500行。我的想法是在需要时调用函数,并在page.js文件中进行测试。通过查看代码,您似乎已经将所有元素放入函数中,并在规范中访问它们。一般来说,这种访问元素的方式会导致一些不可靠的测试,您将无法自信地运行测试脚本并且不会出错 Gragrator的社区广泛鼓励使用页面对象。量角器有一些很好的文档,他们特别提到了开始使用的样式指南 我在编写量角器测试时的一些经验提示: 避免使用browser.sleep加载页面,而是使用browser.manage.timeouts.pageLoadTimeout10000 使用与web元素交互的预期条件ElementToBickable、elementToBeSelected等 有效地使用页面对象。避免访问/执行页面对象中元素的操作。必须在规范内完成,即。 您的page.js应该如下所示-
var somePage = function() {
this.username = element(by.id('someId')); //Here we are only defining the elements
this.password = element(by.id('someId'));
this.button = element(by.css('someCss'));
this.login = function(uid,pwd) { // If we are using functions in page objects, we would just access the defined elements above rather than defining them in the function (reusability & decoupling).
this.username.sendKeys(uid);
this.password.sendKeys(pwd);
this.button.click();
};
};
var SomePage = require('path to your page.js');
describe('page', function() {
var page = new SomePage();
it('should test page', function() {
page.username.sendKeys('username'); // Here we are performing the action on the elements.
page.password.sendKeys('password');
page.login(username,password);
});
});
在上面的页面对象中,如果用户名或密码元素发生更改,您只需更改它们,无需触摸登录功能
您的spec.js应该如下所示-
var somePage = function() {
this.username = element(by.id('someId')); //Here we are only defining the elements
this.password = element(by.id('someId'));
this.button = element(by.css('someCss'));
this.login = function(uid,pwd) { // If we are using functions in page objects, we would just access the defined elements above rather than defining them in the function (reusability & decoupling).
this.username.sendKeys(uid);
this.password.sendKeys(pwd);
this.button.click();
};
};
var SomePage = require('path to your page.js');
describe('page', function() {
var page = new SomePage();
it('should test page', function() {
page.username.sendKeys('username'); // Here we are performing the action on the elements.
page.password.sendKeys('password');
page.login(username,password);
});
});
在单独的JSON文件中维护测试数据。
处理非角度页面时,设置browser.ignoreSynchronization=true
尽可能多地使用CSS选择器来标识图元。
由于量角器是社区驱动的->遵循GitHub、StackOverflow和Gitter上的量角器。
您将从这些平台获得所有更新/问题,以便您可以解决您的问题或寻求帮助,这些了不起的人会帮助您 您的回答非常简洁明了,这将帮助我克服盲目使用页面对象的困难。我有点不明白你的意思:避免访问/执行页面对象中元素的操作。它必须在规范内完成。你介意详细说明一下吗?更新了我的答案以提供更多的见解,请检查它是否有帮助!现在已经非常清楚了,谢谢你:我建议你把这篇文章发到网上。这是针对类似这样的代码审查问题。我投票将此问题作为离题题结束,因为这是一个代码审查请求。你可能会在上得到帮助,但你需要更具体,而不是征求一些建议。