我想验证我们网站中的元关键字。为了验证,我使用了
toHaveAttribute
和这个xpath:
page.locator('[name="keywords"]');
我的场景是:
toHaveAttribute
但是不知何故,在检查元关键字时它没有通过。我在检查元描述时使用相同的方法/脚本并且它有效。现在我很困惑为什么在检查元关键字时它不起作用。这是我的脚本:
import { test, expect } from '@playwright/test';
test('test', async ({ page }) => {
await page.goto('https://stage-unientwww.euwest01.umbraco.io/');
await page.getByLabel('User name').click();
await page.getByLabel('User name').fill('unienttest');
await page.getByLabel('Password').click();
await page.getByLabel('Password').fill('Unient1234');
await page.getByRole('button', { name: 'Log in' }).click();
await page.getByRole('button', { name: 'Accept All' }).click();
await page.getByRole('heading', { name: 'Your Versatile Partner for Better Offshoring' }).click({
button: 'right'
});
await page.goto('view-source:https://stage-unientwww.euwest01.umbraco.io/');
const Keywords = page.locator('[name="keywords"]');
await expect(Keywords).toHaveAttribute('content','Unient, bpo company, outsource company, bpo company philippines, bpo outsource, one outsource, offshoring australia, outsourcing philippines, outsourced bpo, bpo companies.');
元元素:
<head>
<meta name="description" content="Empower your business to function onshore and offshore as one enterprise with Unient's versatile range of services and regional service delivery capabilities."
<meta name="keywords" content="Unient, bpo company, outsource company, bpo company philippines, bpo outsource, one outsource, offshoring australia, outsourcing philippines, outsourced bpo, bpo companies"
</head>
代替
await page.goto('view-source:https://stage-unientwww.euwest01.umbraco.io/');
使用
await page.goto('https://stage-unientwww.euwest01.umbraco.io/');
view-source:
将页面呈现为文本而不是解析和执行 HTML。这并不经常被用作绕过 HTML 解析和获取外部资源的简单方法,但如果您想使用定位器并以任何方式查询或操作页面,您将需要一个已解析的 HTML 页面和一个 DOM。
我还要收紧 CSS 选择器(不是 XPath)以澄清标签:
page.locator('meta[name="keywords"]');
仔细观察页面,你有两个 head 标签和格式错误的 HTML,因此页面无效:
<!-- ... -->
</nav>
</header>
<head>
<meta name="description" content="Empower your business to function onshore and offshore as one enterprise with Unient's versatile range of services and regional service delivery capabilities."
<meta name="keywords" content="Unient, bpo company, outsource company, bpo company philippines, bpo outsource, one outsource, offshoring australia, outsourcing philippines, outsourced bpo, bpo companies"
</head>
<style>
</style>
<!-- ... -->
您可以看到第二个
<head>
标签随机转储到 <body>
中并且缺少结束 >
字符,因此浏览器可能会忽略它。如果您可以将它移动到实际的 <head>
中并修复那些缺失的 >
s,那么上面的代码应该可以工作。您可以在原始问题中看到缺少的>
。
https://validator.w3.org/nu/#textarea 可用于验证您的 HTML。无效的 HTML 可以被忽略并以令人惊讶的方式重新排列。