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

时间:2016-07-13 09:45:51

标签: selenium protractor

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

$ curl -X POST -v -u myaccount:passwd "https://api.bitbucket.org/2.0/repositories/myteam/repo2" -H "Content-Type: application/json"  -d '{"has_wiki": true, "is_private": true, "project": {"key": "PRJ_KEY"}}'

我的规范文件:

exports.config = {
  framework: 'jasmine2',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['page.js'],



   onPrepare: function() {

    var jasmineReporters = require('jasmine-reporters');

}
}

我正在使用另一个文件,我在其中创建了辅助函数,因此我的测试看起来更具可读性,这是我在pastebin上传的主要代码http://pastebin.com/KgXCh74m,因为它是500行。我的想法是在你需要的时候调用一个函数并在page.js文件中测试它。

1 个答案:

答案 0 :(得分:2)

通过查看代码,您似乎已将所有元素放入函数中并在规范中访问它们。通常,这种访问元素的方式会导致一些 Flaky 测试,并且您将无法自信地运行测试脚本并且没有错误。

量角器社区广泛鼓励使用页面对象。量角器有一些很好的文档,他们特别提到样式指南http://www.protractortest.org/#/style-guide来开始。

我在编写量角器测试时的一些技巧:

  • 避免browser.sleep页面加载,而是使用browser.manage().timeouts().pageLoadTimeout(10000);

  • 使用Expected Conditions与网络元素elementToBeClickableelementToBeSelected等进行互动。

  • 有效使用页面对象。避免访问/执行页面对象中元素的操作。它必须在规范内完成,即

你的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();
  };

 };

在上述页面对象中,如果usernamepassword元素发生更改,则只需更改它们,无需触及login功能。

你的spec.js应该是这样的 -

 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
  • 尽可能多地使用CssSelectors来识别元素。
  • 由于量角器是社区驱动的 - >关注GitHub上的量角器,StackOverflow&小胶质。

您可以从这些平台获得所有更新/问题,以便您可以解决问题或寻求帮助,这些很棒的人会帮助您!