Selenium 量角器e2e关于代码复杂性的测试建议

Selenium 量角器e2e关于代码复杂性的测试建议,selenium,protractor,Selenium,Protractor,我知道我的问题会被标记为广泛的,但我没有想到另一个地方问它。我在QA工作,一个月前我开始自学量角器,这样我就可以用量角器测试我们的项目。没有人指导我,我全部是自己和谷歌学习的,所以我想让你们检查我编写的代码,并给我一些建议。它看起来是应该的,因为我认为它毫无价值,它完成了任务,但我觉得它仍然是初学者水平,没有人指导我,所以我知道我目前的水平,欢迎任何建议。我的配置文件非常基本 exports.config = { framework: 'jasmine2', seleniumAddres

我知道我的问题会被标记为广泛的,但我没有想到另一个地方问它。我在QA工作,一个月前我开始自学量角器,这样我就可以用量角器测试我们的项目。没有人指导我,我全部是自己和谷歌学习的,所以我想让你们检查我编写的代码,并给我一些建议。它看起来是应该的,因为我认为它毫无价值,它完成了任务,但我觉得它仍然是初学者水平,没有人指导我,所以我知道我目前的水平,欢迎任何建议。我的配置文件非常基本

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上的量角器。
您将从这些平台获得所有更新/问题,以便您可以解决您的问题或寻求帮助,这些了不起的人会帮助您

您的回答非常简洁明了,这将帮助我克服盲目使用页面对象的困难。我有点不明白你的意思:避免访问/执行页面对象中元素的操作。它必须在规范内完成。你介意详细说明一下吗?更新了我的答案以提供更多的见解,请检查它是否有帮助!现在已经非常清楚了,谢谢你:我建议你把这篇文章发到网上。这是针对类似这样的代码审查问题。我投票将此问题作为离题题结束,因为这是一个代码审查请求。你可能会在上得到帮助,但你需要更具体,而不是征求一些建议。