hasAttribute在DOM不能正常工作(hasAttribute in DOM not wor

2019-10-29 09:13发布

我有这种形式在tect.html文件,我想如果按钮被禁用或不进行测试:

<button id="ref_button"....[disabled]="editForm.form.invalid || isSaving" class="btn btn-primary">

我用的量角器,黄瓜和柴DOM如果当表单数据无效禁用此按钮进行测试,所以我检查其属性,这样的禁用:

  JSDOM.fromFile("file.html").then(dom => { dom.window.document.getElementById("ref_button").has.attr('disabled').should.be.true; }); }); 

现在测试失败,因为它总是发现禁用的属性,当按钮被禁用或没有,当的数据都是有效。

我究竟做错了什么?

Answer 1:

我认为属性[disabled]没有按钮元素上存在(这就是为什么它总是如此)。 它的属性disabled ,你必须寻找(不含[]标记。它绑定语法。

所以,思考它的时候,这应该工作:(没有测试...)

dom.window.document.getElementById("ref_button").should.not.have.attr("disabled");

但可能这将始终输出false ,因为一个按钮确实有属性。 为了使这一工作始终你应该采取的值disabled属性,并检查wheter这是真的。

dom.window.document.getElementById("ref_button").getAttribute("disabled").toBeTruethy().

其实我不知道,如果toBeTruethy()在湾仔确实存在,但在这里我要说的是,你应该检查一个属性的值,而不是只是如果属性一般的存在。

另一件事更何况是这样的:

element(by.css("*[id='field_nombre']")).click();
element(by.css("*[id='field_nombre']")).sendKeys('').then(callback);

我猜click()也是一个异步函数,并在上面的例子中键之前发送click()已经完成它的执行。 这是正确的,我认为:

element(by.css("*[id='field_nombre']")).click().then(function() {
  element(by.css("*[id='field_nombre']")).sendKeys('').then(callback);
});


Answer 2:

对于angularJs,你应该使用指令ng-disabled在HTML

从官方文档 :

因为我们不能使用禁用的属性里面插一个特殊的指令是必要的。 见插值指南获取更多信息。



文章来源: hasAttribute in DOM not working properly