Playwright.js 如何检查页面上是否存在元素
How to check if an element exists on the page in Playwright.js
我正在使用 playwright.js 为 https://target.com 编写脚本,在您提交送货信息的页面上,如果您完成了先前在该目标帐户上进行的结帐过程。
我想每次 运行 脚本时都输入新的运输信息,所以我必须让编剧点击删除,如果它存在于页面上,然后输入运输信息。
下面显示的函数可以单击删除,但随后在 if (await page.$$("text='Delete'") != [])
处超时,而不是执行函数的 else
部分。
如何重写这个函数,让它只检查元素(选择器:text='Delete'
)是否存在,存在则点击,不存在则执行函数的填充部分?
async function deliveryAddress() {
if (await page.$$("text='Delete'") != []) {
await page.click("text='Delete'", {force:true})
await deliveryAddress()
} else {
await page.focus('input#full_name')
await page.type('input#full_name', fullName, {delay: delayms});
await page.focus('input#address_line1')
await page.type('input#address_line1', address, {delay: delayms});
await page.focus('input#zip_code')
await page.type('input#zip_code', zipCode, {delay: delayms});
await page.focus('input#mobile')
await page.type('input#mobile', phoneNumber, {delay: delayms});
await page.click("text='Save & continue'", {force:true})
}
}
您有两个主要选择:
const deletes = await page.$$("text='Delete'");
if (deletes) {
// ...
}
或
const deletes = await page.$$("text='Delete'");
if (deletes.length) {
// ...
}
为了便于阅读,我个人会将 $$
命令留在 if 语句之外,但这可能只有我自己。
页面上似乎只有一个元素的属性文本值为“Delete”,因为您没有对 $$
returns 的数组进行任何操作。如果是这样,您可以使用 $
:
const del = await page.$("text='Delete'");
if (del) {
// ...
}
try {
await page.waitForSelector(selector, { timeout: 5000 })
// ...`enter code here`
} catch (error) {`enter code here`
console.log("The element didn't appear.")
}
来自 - https://github.com/puppeteer/puppeteer/issues/1149#issuecomment-434302298
await expect(page.locator(".MyClass")).toHaveCount(0)
await page.isVisible("text='Delete'")
也许这就是您要找的。
通常这在很多情况下都有帮助,检查元素是否存在。
if(await page.locator(your_selector).count()>0)
await expect(page).toHaveSelectorCount('.floorNav__modal', 1);
我正在使用 playwright.js 为 https://target.com 编写脚本,在您提交送货信息的页面上,如果您完成了先前在该目标帐户上进行的结帐过程。
我想每次 运行 脚本时都输入新的运输信息,所以我必须让编剧点击删除,如果它存在于页面上,然后输入运输信息。
下面显示的函数可以单击删除,但随后在 if (await page.$$("text='Delete'") != [])
处超时,而不是执行函数的 else
部分。
如何重写这个函数,让它只检查元素(选择器:text='Delete'
)是否存在,存在则点击,不存在则执行函数的填充部分?
async function deliveryAddress() {
if (await page.$$("text='Delete'") != []) {
await page.click("text='Delete'", {force:true})
await deliveryAddress()
} else {
await page.focus('input#full_name')
await page.type('input#full_name', fullName, {delay: delayms});
await page.focus('input#address_line1')
await page.type('input#address_line1', address, {delay: delayms});
await page.focus('input#zip_code')
await page.type('input#zip_code', zipCode, {delay: delayms});
await page.focus('input#mobile')
await page.type('input#mobile', phoneNumber, {delay: delayms});
await page.click("text='Save & continue'", {force:true})
}
}
您有两个主要选择:
const deletes = await page.$$("text='Delete'");
if (deletes) {
// ...
}
或
const deletes = await page.$$("text='Delete'");
if (deletes.length) {
// ...
}
为了便于阅读,我个人会将 $$
命令留在 if 语句之外,但这可能只有我自己。
页面上似乎只有一个元素的属性文本值为“Delete”,因为您没有对 $$
returns 的数组进行任何操作。如果是这样,您可以使用 $
:
const del = await page.$("text='Delete'");
if (del) {
// ...
}
try {
await page.waitForSelector(selector, { timeout: 5000 })
// ...`enter code here`
} catch (error) {`enter code here`
console.log("The element didn't appear.")
}
来自 - https://github.com/puppeteer/puppeteer/issues/1149#issuecomment-434302298
await expect(page.locator(".MyClass")).toHaveCount(0)
await page.isVisible("text='Delete'")
也许这就是您要找的。
通常这在很多情况下都有帮助,检查元素是否存在。
if(await page.locator(your_selector).count()>0)
await expect(page).toHaveSelectorCount('.floorNav__modal', 1);