无法在 'Document' 上执行 'querySelector':'button[data-id="purple-button" disabled]' 不是有效的选择器
Failed to execute 'querySelector' on 'Document': 'button[data-id="purple-button" disabled]' is not a valid selector
如何查询具有多个属性的元素? IE。我想 select 基于元素类型 data-id 的元素,以及它是否 disabled
。
这里是 html:
<button disabled="" data-id="purple-button">...</button>
这是我的测试代码:
await page.evaluate(
() => document.querySelector('button[data-id="purple-button" disabled]') !== null,
);
我尝试 运行 测试时的错误是这个 post 的标题。我曾尝试查看 Whosebug 上的其他解决方案,但尚未找到任何使用具有多个属性的元素示例的解决方案。
提前致谢!
大多数情况下,当按钮被禁用时,它有一个“aria-label”或者当按钮变为启用 -> 禁用时会发生变化的东西。
这是我通常检查可分页按钮何时到达末尾的方式。
document.querySelector('button[data-id="purple-button"').getAttribute("aria-label") == "disabled"
您应该使用方括号来分隔属性。
document.querySelector('button[data-id="purple-button"][disabled]')
每
我发现您的代码存在一些问题,因此我也将其包括在内。
谨慎对待那些 disabled=
,例如,请参见此处,我在此处获取节点列表,然后过滤它们以获取禁用的节点。
请注意,您还可以将 .length
作为布尔值与 !!
一起使用,因此我也包含了该示例(不是您的 !== null;
东西)
let purples = document.querySelectorAll('button[data-id="purple-button"]');
console.log("p:", purples.length);
let purplesDisabled = Array.prototype.filter.call(purples, function(el) {
return el.disabled;
});
console.log("p:", purples.length, "pD:", purplesDisabled.length, !!purplesDisabled.length);
let greens = document.querySelectorAll('button[data-id="green-button"]');
console.log("p:", greens.length);
let greensDisabled = Array.prototype.filter.call(greens, function(el) {
return el.disabled;
});
console.log("g:", greens.length, "gD:", greensDisabled.length, "Boolean:", !!greensDisabled.length);
<button disabled data-id="purple-button">...</button>
<button disabled data-id="purple-button">...</button>
<button data-id="purple-button">...</button>
<button disabled="fred" data-id="purple-button">...</button>
<button disabled=false data-id="purple-button">Nope, it is disabled</button>
<button disabled="false" data-id="purple-button">Not Really NOT disabled</button>
<button data-id="green-button">...</button>
<button data-id="green-button">...</button>
<button data-id="green-button">...</button>
如何查询具有多个属性的元素? IE。我想 select 基于元素类型 data-id 的元素,以及它是否 disabled
。
这里是 html:
<button disabled="" data-id="purple-button">...</button>
这是我的测试代码:
await page.evaluate(
() => document.querySelector('button[data-id="purple-button" disabled]') !== null,
);
我尝试 运行 测试时的错误是这个 post 的标题。我曾尝试查看 Whosebug 上的其他解决方案,但尚未找到任何使用具有多个属性的元素示例的解决方案。
提前致谢!
大多数情况下,当按钮被禁用时,它有一个“aria-label”或者当按钮变为启用 -> 禁用时会发生变化的东西。
这是我通常检查可分页按钮何时到达末尾的方式。
document.querySelector('button[data-id="purple-button"').getAttribute("aria-label") == "disabled"
您应该使用方括号来分隔属性。
document.querySelector('button[data-id="purple-button"][disabled]')
每
我发现您的代码存在一些问题,因此我也将其包括在内。
谨慎对待那些 disabled=
,例如,请参见此处,我在此处获取节点列表,然后过滤它们以获取禁用的节点。
请注意,您还可以将 .length
作为布尔值与 !!
一起使用,因此我也包含了该示例(不是您的 !== null;
东西)
let purples = document.querySelectorAll('button[data-id="purple-button"]');
console.log("p:", purples.length);
let purplesDisabled = Array.prototype.filter.call(purples, function(el) {
return el.disabled;
});
console.log("p:", purples.length, "pD:", purplesDisabled.length, !!purplesDisabled.length);
let greens = document.querySelectorAll('button[data-id="green-button"]');
console.log("p:", greens.length);
let greensDisabled = Array.prototype.filter.call(greens, function(el) {
return el.disabled;
});
console.log("g:", greens.length, "gD:", greensDisabled.length, "Boolean:", !!greensDisabled.length);
<button disabled data-id="purple-button">...</button>
<button disabled data-id="purple-button">...</button>
<button data-id="purple-button">...</button>
<button disabled="fred" data-id="purple-button">...</button>
<button disabled=false data-id="purple-button">Nope, it is disabled</button>
<button disabled="false" data-id="purple-button">Not Really NOT disabled</button>
<button data-id="green-button">...</button>
<button data-id="green-button">...</button>
<button data-id="green-button">...</button>