好吧,我有這段代碼,我正在嘗試,並在寫作失敗。我想要做的是確保傳遞給函數的索引位於頁面上可用元素的範圍內。而且,如果是,則返回一個元素引用。獲得量角器的承諾,變量和結果同步
假設我有以下幾點:
3210所以,我有這樣的功能:
function getRow(index) {
// get count of rows.
var count = $$('li').count();
// Ensure a parameter has been passed.
if (!index) {
throw Error("A parameter must be supplied for function getRow. Valid values are 0 through " + count-1);
}
// Ensure the parameter is within bounds
if (index < 0 || index >= count) {
throw Error("The parameter, " + index + ", is not within the bounds of 0 through " + count-1);
}
return $$('li').get(index);
}
以上將失敗,因爲數是不是真的算,而是一個承諾。
所以,我試着用各種方法修改它。我以爲會是成功的一個如下:
// get count of rows.
var count;
$$('li').count().then(function(c) { count = c; });
或
// get count of rows.
var count = $$('li').count().then(function(c) { return c; });
我已經變得沮喪,並試圖如果拋出整個thenable函數中塊,但不會「看「索引。
(每次我想我已經想通了這一點,我不感謝您的任何和所有幫助!)
UPDATE:
繼建議下面我試着修改我的代碼:
function getRow(index) {
//get count of rows.
var count = $$('li').count().then(function(c) {
return function() {
return c;
}
});
protractor.promise.all(count).then(function(count) {
// Ensure a parameter has been passed.
if (!index) {
throw Error("A parameter must be supplied for function getRow. Valid values are 0 through " + count-1);
}
// Ensure the parameter is within bounds
if (index < 0 || index >= count) {
throw Error("The parameter, " + index + ", is not within the bounds of 0 through " + count-1);
}
});
return $$('li').get(index);
}
但因爲失敗了,protractor.promise.all().then()
塊內,index
是不確定的。此外,在錯誤消息中,我甚至沒有得到count的值。
> getRow(0);
A parameter must be supplied for function getRow. Valid values are 0 through
也許是因爲你在單個對象上調用'index'而不是數組(你在你的定位器中缺少'.all')? 'var count = element.all(by.css(...))'help?然後使用'.each'或'.map'等.all函數? [來源](http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.each) – Gunderson
你是對的。我試圖避免使用速記$$,但轉換失敗。我已經更新了這個問題。 – Machtyn