簡體   English   中英

量角器:訪問返回對象的屬性

[英]Protractor: Access properties of returned Object


我遇到以下問題:我的HTML代碼像

<div *ngFor="let device of viewModel.devices; let i=index">
    <input type="radio" name="devices" [value]="device" [(ngModel)]="viewModel.selectedDevice">
        My content...
</div>

重要的部分是“ ngModel”,它返回一個對象(以打字稿形式):

class Device {
    constructor(public name: string, public kind: DeviceKind) {

}}

我現在想獲取存儲在ngModel中的屬性“名稱”和“ DeviceKind”(這是一個枚舉)。
我設法通過以下方式(有點難看)獲得了所有設備的“ ngModel”內容:

element.all(by.xpath("//*[@id='deviceList']/div/input")).then(function (items) {
  items.forEach(function (item) {
      item.getAttribute("ng-reflect-model");   // TODO: How to access the returned object properties
});

(該ID位於較高的div元素中)。 此代碼返回所有對象“ [object Object]”。 (如果我編寫console.log(item.getA ...),或檢查瀏覽器DOM)

我的問題是:如何訪問返回的對象屬性? 有可能嗎?
我嘗試了類似的東西:

item.getAttribute("ng-reflect-model").name
item.getAttribute("ng-reflect-model").then(function(name){...}



更新:
我試圖使其更簡單:
我的法師現在包含以下代碼行:

<div id="tempTest">{{selectedDeviceName}}</div>

我的測試包含以下代碼:

expect(element(by.id('tempTest')).getText()).toEqual('XXXXXX');  // To test if element really exists
var value = element(by.id('tempTest')).evaluate('selectedDeviceName');

結果是: unknown error: Cannot read property '$eval' of undefined

我嘗試了一個更簡單的評估(應該可以,不確定):

element(by.id('tempTest')).evaluate('4+3');

之后,我打印了請求和響應:
請求:

POST /session/b0eb1b5a-3d96-4350-9029-01377249b251/execute HTTP/1.1
accept: application/json; charset=utf-8
{"script":"try { return (function (element, expression) {\n  return angular.element(element).scope().$eval(expression);\n}).apply(this, arguments); }\ncatch(e) { throw (e instanceof Error) ? e : new Error(e); }","args":[{"element-6066-11e4-a52e-4f735466cecf":"0.34935142695585064-12","ELEMENT":"0.34935142695585064-12"},"4+3"]}

響應:

{"sessionId":"b0eb1b5a-3d96-4350-9029-01377249b251","status":13,"value":{"message":"unknown error: Cannot read property '$eval' of undefined\n  (Session info: chrome=59.0.3071.125)\n  (Driver info: chromedriver=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),platform=Windows NT 10.0.16299 x86_64)"}}

似乎它試圖獲取元素的范圍,但是失敗了。

對於量角器/硒getAttribute() api,它只能返回字符串值或null,不能返回對象。 因此,您在代碼中使用了錯誤的方式。

如果要在Angularjs的ng-model中獲取值,則有兩種選擇:

選項1使用量角器api element().evaluate() ,僅適用於量角器5.0及更高版本
有關詳細信息,請參閱量角器官方API文檔。

選項2將JavaScript注入瀏覽器以獲取價值,可在任何Protracor版本上使用

var script = 'return angular.element(arguments[0]).scope().$eval(arguments[1]);';
browser.executeScript(script, element(by.xxx(...)).getWebElement(), 'viewModel.devices')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM