剧作家 - 嵌套定位器调用
Playwright - nested locator calls
我正在尝试测试这样的结构:
<div custom-id=a>
<div custom-id=b>
<h1>one</h1>
</div>
<div custom-id=b>
<h1>two</h1>
</div>
</div>
<div custom-id=a>
<div custom-id=b>
<h1>three</h1>
</div>
<div custom-id=b>
<h1>four</h1>
</div>
</div>
我想分两部分查询。首先,取回所有 custom-id=a 节点,然后针对每个节点,取回所有 custom-id=b 节点。
根据我之前提出的问题,我的印象是这样的东西会起作用:
const aNodes = await this.page.locator("custom-id=a");
for (let aNode in aNodes) {
const bNodes = await aNode.evaluate(node =>
Array.from(node.querySelectorAll('custom-id="b"')));
}
但是当我尝试这个时,IDE linter 告诉我 aNode 是一个字符串。我想我预计 aNodes 将是一个我可以再次查询的数组。
如果您已经按照这些思路回答了我的问题,我深表歉意。我在这里很难掌握一些基础知识。
A locator
本身是不可迭代的。但是您可以使用 count
函数获取元素计数,然后 nth
一次获取一个元素:
const aNodes = await this.page.locator("custom-id=a");
const count = await aNodes.count();
for (let i = 0; i < count; ++i) {
const bNodes = await aNodes.nth(i).evaluate(node =>
Array.from(node.querySelectorAll('custom-id="b"')));
}
我正在尝试测试这样的结构:
<div custom-id=a>
<div custom-id=b>
<h1>one</h1>
</div>
<div custom-id=b>
<h1>two</h1>
</div>
</div>
<div custom-id=a>
<div custom-id=b>
<h1>three</h1>
</div>
<div custom-id=b>
<h1>four</h1>
</div>
</div>
我想分两部分查询。首先,取回所有 custom-id=a 节点,然后针对每个节点,取回所有 custom-id=b 节点。
根据我之前提出的问题,我的印象是这样的东西会起作用:
const aNodes = await this.page.locator("custom-id=a");
for (let aNode in aNodes) {
const bNodes = await aNode.evaluate(node =>
Array.from(node.querySelectorAll('custom-id="b"')));
}
但是当我尝试这个时,IDE linter 告诉我 aNode 是一个字符串。我想我预计 aNodes 将是一个我可以再次查询的数组。
如果您已经按照这些思路回答了我的问题,我深表歉意。我在这里很难掌握一些基础知识。
A locator
本身是不可迭代的。但是您可以使用 count
函数获取元素计数,然后 nth
一次获取一个元素:
const aNodes = await this.page.locator("custom-id=a");
const count = await aNodes.count();
for (let i = 0; i < count; ++i) {
const bNodes = await aNodes.nth(i).evaluate(node =>
Array.from(node.querySelectorAll('custom-id="b"')));
}