我想知道Protractor的Javascript(NodeJS)中是否有一个框架,它支持一种与site_prism一样定义页面对象上的页面对象元素的干净方法。我已经检查了astrolabe,但不太符合目的。
这是用site_prism声明性定义页面对象的方式

class Home < SitePrism::Page
  set_url "/index.htm"
  set_url_matcher /google.com\/?/
  element :search_field, "input[name='q']"
  element :search_button, "button[name='btnK']"
  elements :footer_links, "#footer a"
  section :menu, MenuSection, "#gbx3"
end

class MenuSection < SitePrism::Section
  element :search, "a.search"
  element :images, "a.image-search"
  element :maps, "a.map-search"
end
除了Protractor之外,没有人知道或已经开发了像上面这样的解决方案。也许有人在内部使用自定义框架,您愿意开源吗?
关于astrolabe,它缺乏集合支持,我正在寻找一种更具说明性的语法。代替
username: { get: function() { return this.findElement(this.by.input('username')); },
我期待的是更具声明性的内容,例如:
username: By.input('username'),
可以在这里进一步研究缺少的astrolabe功能,但我的问题不是关于astrolabe本身,而是关于JS是否有更好的site_prism等效项。
注意:从Software Quality Assurance & Testing迁移问题,因为那里没有引起足够的重视。

最佳答案

我使用这种模式(稍微干净一点):

'use strict'
exports.MyClassPage = function() {

  var textName = element(by.id("name"));
  var tabUsers = element.all(by.repeater("user in users"));

  this.setTxtName = function(name) {
    return textName.sendKeys(name);
  };
}

10-06 09:11