首页 > 解决方案 > DOM 中的 hasAttribute 无法正常工作

问题描述

我在 tect.html 文件中有这个表单,我想测试按钮是否被禁用:

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

我正在使用量角器、黄瓜和 chai dom 来测试当表单数据无效时是否禁用此按钮,因此我检查其属性 disabled 如下:

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

现在测试失败了,因为它总是发现属性禁用,按钮是否禁用,数据是否有效。

我究竟做错了什么?

标签: javascripthtmlangularjstestingprotractor

解决方案


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

所以在考虑它时,这应该有效:(没有测试......)

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

但可能这将始终输出false,因为按钮确实具有该属性。为了使这始终如一地工作,您应该获取disabled属性的值并检查它是否为真。

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

我实际上不知道toBeTruethy()chai 中是否存在,但我的观点是,您应该检查属性的值,而不仅仅是一般情况下是否存在属性。

另一件事要提到的是:

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);
});

推荐阅读