0

我正在使用 playwright 在 Webkit 浏览器上显示 SAPUI5 应用程序。它在 Chromium 和 Firefox 上加载,只是空白。我的代码如下所示:

const playwright = require('playwright');

(async () => {
  for (const browserType of ['chromium', 'firefox', 'webkit']) {
    const browser = await playwright[browserType].launch();
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto("https://sapui5.hana.ondemand.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3#/categories");
    await page.screenshot({ path: `example-${browserType}.png` });
    await browser.close();
  }
})();

有没有办法在 webkit 浏览器上显示网站?

4

2 回答 2

1

您的问题在于 Internet 连接不佳或网站加载存在一些问题。我通过创建一个额外的脚本解决了同样的问题。创建下一个脚本(单独的 js 文件):

const browser = {
        chrome: 'chromium',
        firefox: 'firefox',
        safari: 'webkit'
    };
    
    const getLoadDocument = (browser) => {
        switch (browser) {
            case browser.chromium:
                return 'domcontentloaded';
            case browser.firefox:
                return 'load';
            default:
                return 'domcontentloaded';
        }
    };
    
    module.exports = ({
        browser,
        getLoadDocument
    });

并尝试将其添加到您的代码中,如下所示:

const playwright = require('playwright');

(async () => {
  for (const browserType of ['chromium', 'firefox', 'webkit']) {
    const browser = await playwright[browserType].launch();
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto("https://sapui5.hana.ondemand.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3#/categories");
    await page.waitForLoadState(helpers.getLoadDocument(browserType))
    await page.screenshot({ path: `example-${browserType}.png` });
    await browser.close();
  }
})();

我想它也会对你有所帮助。

于 2020-07-05T21:07:18.493 回答
0

您可以添加{ waitUntil: "networkidle" }到您的page.goto呼叫中,这意味着它将等到您的网页上有 500 毫秒的网络空闲。通常,这意味着网页已完成加载,但该网站似乎很慢。

作为一种解决方法,您有几个选项,如果您等待特定元素(.click() 也将等待一个元素),对于您的情况可能是最好的,您是否正在尝试编写测试?

或者,您可以使用waitForTimeout等待一段时间。

最后是这样的:

// @ts-check
const playwright = require("playwright");

(async () => {
  // Try to add 'firefox' to the list ↓
  for (const browserType of ['chromium', 'webkit', 'firefox']) {
    /** @type {import('playwright').Browser} */
    const browser = await playwright[browserType].launch();
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto("https://sapui5.hana.ondemand.com/test-resources/sap/m/demokit/cart/webapp/index.html?sap-ui-theme=sap_fiori_3#/categories", {
      waitUntil: "networkidle"
    });
    await page.waitForSelector("text=Accessories")
    await page.screenshot({ path: `example-${browserType}.png` });
    await browser.close();
  }
})();

以交互方式查看此处:https ://try.playwright.tech/?s=36u3d

于 2020-06-24T10:25:31.277 回答