[英]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.