2015-04-06 31 views
0

這是我試圖從承諾內的對象獲取價值的問題。我試圖從列(Kendo網格)獲得第一個元素。需要操縱該值。量角器 - 如何從對象獲取價值以操縱承諾之外的價值

下面是代碼:

currentAmountDue = element(((helper.getGridValue(businessPaymentsPage.colAmountDue(), 0)).getText().then(function (value) { 
       x = value; 
       console.log('x: ', x); 
       console.log('Value : ', value); 
       return value; 
      }))); 
console.log('x outside : ', x); 

下面是結果:

x outside : 0 

x: $9,750.75 

Value : $9,750.75 

我是新來量角器和承諾。

+0

是變種X聲明爲窗口的變量?如果是的話,你有沒有嘗試過setTimeout(function(){console.log('x outside:',x);},1000); ?當前諾言函數中的代碼在您打印控制檯日誌之前執行。這就是爲什麼x外部打印在函數內部之前的原因。 – RobertoNovelo

+0

@RobertoNovelo注意到這是一個量角器的具體問題。 – alecxe

+0

雖然他試圖立即在promise函數中獲取變量的值,但是這不是爲什麼它在函數內部打印之前? – RobertoNovelo

回答

1

then塊內的代碼將稍後執行。 getText()是一種異步方法,它返回一個在實際獲取文本(將在稍後發生)時將解析的promise。

一般來說,如果有承諾,您需要將依賴代碼的代碼與then關聯起來,因此請將您的「外部」代碼放在then的內部。在實踐中,大多數頂級量角器方法都使用ControlFlow註冊其承諾,以確保承諾按順序得到解決。這最大限度地減少了明確的then鏈的數量,但確實使代碼更加神奇。 (該controlflow基礎設施是量角器建立在WebDriverJS的一部分。)

閱讀https://github.com/angular/protractor/blob/master/docs/control-flow.mdhttps://github.com/SeleniumHQ/selenium/wiki/WebDriverJs#control-flows

+0

謝謝!這比你知道的更有幫助。我已經開始使用鏈接的承諾。 @ P.T。 – llacey