Protractor 从页面对象中的ElementArrayFinder获取单个ElementFinder

Protractor 从页面对象中的ElementArrayFinder获取单个ElementFinder,protractor,Protractor,在单独的页面对象文件中,而不是实际的测试文件中,我尝试执行以下操作: this.item0 = element.all(by.repeater('menu items')).get(0); 这将不起作用,因为代码是在测试运行之前执行的。除了在测试文件中调用get之外,我还没有找到其他方法来实现这一点,我不想这样做。在页面对象文件中有这样做的方法吗?是的,我不是唯一一个使用页面对象的人; 我做了以下工作: var MyPage = function () { this.item0 = ele

在单独的页面对象文件中,而不是实际的测试文件中,我尝试执行以下操作:

this.item0 = element.all(by.repeater('menu items')).get(0);

这将不起作用,因为代码是在测试运行之前执行的。除了在测试文件中调用get之外,我还没有找到其他方法来实现这一点,我不想这样做。在页面对象文件中有这样做的方法吗?

是的,我不是唯一一个使用页面对象的人; 我做了以下工作:

var MyPage = function () {
  this.item0 = element.all(by.repeater('menu items')).get(0);
}
在我的测试中:

describe('MyPage:', function () {
    var myPage = new MyPage();
     // after this line navigate your browser to your page
     // then you can call myPage.item0, myPage.whatEver
}

耶,我不是唯一一个使用页面对象的人; 我做了以下工作:

var MyPage = function () {
  this.item0 = element.all(by.repeater('menu items')).get(0);
}
在我的测试中:

describe('MyPage:', function () {
    var myPage = new MyPage();
     // after this line navigate your browser to your page
     // then you can call myPage.item0, myPage.whatEver
}

这种行为常常使试图编写页面对象的人感到困惑

在调用elementFinder或elementArrayFinder上的函数之前,不会执行定位器。请参阅

我通常使用这种模式:

// Page object
MyView = function() {
  // This will not find elements until you call count(), get(), first(), etc.
  this.itemList = element.all(by.repeater('menu items'));
};
module.exports = new MyView();

// Test

// Require the page object at the top of the test file.
var myView = require('./my-view.js');

// Use the page object in the test.
it('should get first element', function() {
  myView.itemList.get(0).then(function(webElement) {
  })
});

这种行为常常使试图编写页面对象的人感到困惑

在调用elementFinder或elementArrayFinder上的函数之前,不会执行定位器。请参阅

我通常使用这种模式:

// Page object
MyView = function() {
  // This will not find elements until you call count(), get(), first(), etc.
  this.itemList = element.all(by.repeater('menu items'));
};
module.exports = new MyView();

// Test

// Require the page object at the top of the test file.
var myView = require('./my-view.js');

// Use the page object in the test.
it('should get first element', function() {
  myView.itemList.get(0).then(function(webElement) {
  })
});
以下是来自

/** *按索引获取ElementArrayFinder中的元素。索引从0开始。 *这实际上并不检索底层元素。 * ElementArrayFinder.prototype.get=函数。。。

因此,即使在加载元素之前,您也应该能够从page对象中调用它

/** *按索引获取ElementArrayFinder中的元素。索引从0开始。 *这实际上并不检索底层元素。 * ElementArrayFinder.prototype.get=函数。。。


因此,很明显,即使在加载元素之前,您也应该能够从page对象中调用它。

这对我来说不起作用。我最后做的是保存elementArrayFinder,然后编写一个函数item0,在finder上调用get0。这对我来说不起作用。我最后做的是保存elementArrayFinder,然后编写一个函数item0,在finder上调用get0。我只是把函数放在page对象本身中。@Andres D为什么这在pg obj中不起作用?this.arrayList.get0.then函数we{we.click;};I get error-Failed:无法调用未定义的方法'get'。这不是问题的答案。op询问的是如何从PO中调用get,而不是测试文件。我最终也做了类似的事情。我只是把函数放在page对象本身中。@Andres D为什么这在pg obj中不起作用?this.arrayList.get0.then函数we{we.click;};I get error-Failed:无法调用未定义的方法'get'。这不是问题的答案。op询问如何从PO中调用get而不是测试文件。此问题已通过修复。因此,您需要更新量角器模块以获得此行为。此问题已通过修复。因此,您需要更新量角器模块以获得此行为。问题是,直到6月2日,添加的first、last和getindex才被支持。添加的first、last和getindex不会立即执行,允许将它们放置在页面objectsSee@Joel Kornbluh的答案中,这是正确的答案。问题是,直到6月2日,添加的first、last和getindex才被支持,因此不会立即执行,从而允许将它们放置在页面objectsSee@Joel Kornbluh的答案中,这是正确的答案。