javascript - 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;
});
});
现在测试失败了,因为它总是发现属性禁用,按钮是否禁用,数据是否有效。
我究竟做错了什么?
解决方案
我认为[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);
});
推荐阅读
- mysql - 如何使用 Laravel eloquent 编写这个原始的 mysql 左连接查询?
- coded-ui-tests - ControlName 不适用于 codedui 中的相同 Wincontrols
- java - 在我的 IDEA 中使用 Flink,但是运行错误:java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc,如何在 intelliJ 中配置我的 scala 版本?
- java - Zuul 并将 url 路径转发到另一个 url 路径
- css - 封装的弹性容器包装
- visual-studio-code - 如何在 VSCode 中继承任务?
- python-3.x - 如何附加腌制熊猫数据框的块
- javascript - 使用 Javascript 对象在画布上绘制板
- angularjs - AngularJS 注入错误 - 未知提供者:modalMessagesProvider <- modalMessages
- javascript - Angular js文件上传只允许图像扩展