剧作家:toHaveAttribute在检查Meta Keywords时不起作用

问题描述 投票:0回答:1

我想验证我们网站中的元关键字。为了验证,我使用了

toHaveAttribute
和这个xpath:

page.locator('[name="keywords"]');

我的场景是:

  1. 去查看页面源
  2. 找到元关键字:
  3. 使用
    toHaveAttribute
  4. 验证预期和实际字符串是否匹配

但是不知何故,在检查元关键字时它没有通过。我在检查元描述时使用相同的方法/脚本并且它有效。现在我很困惑为什么在检查元关键字时它不起作用。这是我的脚本:

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>
javascript web-scraping css-selectors playwright playwright-test
1个回答
0
投票

代替

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 可以被忽略并以令人惊讶的方式重新排列。

© www.soinside.com 2019 - 2024. All rights reserved.