3

我目前正在尝试使用 Playwright(类似于 Puppeteer)在示例 SAPUI5 应用程序上运行自动化测试。我正在尝试滚动到页面底部。但是,该功能适用​​于除 SAPUI5 应用程序以外的其他网站。

我的代码如下所示:

const playwright = require('playwright');

(async () => {
  for (const browserType of ['chromium']) {
    const browser = await playwright[browserType].launch({
        headless: false
    });
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto("https://sapui5.hana.ondemand.com/test-resources/sap/m/demokit/orderbrowser/webapp/test/mockServer.html?sap-ui-theme=sap_fiori_3");

    await page.setViewport({
        width: 1200,
        height: 500
    });

    await page.waitFor(5000);

    await page.waitForSelector("#__item0-__clone9-content");


    await scrollOnElement(page,"#__item0-__clone9-content",0,300);
  }
})();

async function scrollOnElement(page,selector,x,y) {
    await page.evaluate(([selector, x, y]) => {
      const element = document.querySelector(selector);
      console.log(element);
      element.scroll(x, y);
    }, [selector, x, y]);
}

这是因为 SAP 提供了它自己的滚动而不是利用浏览器窗口的滚动吗?如果是这样,有什么办法可以禁用它?

4

1 回答 1

3

Element.scroll()不知何故在 Chrome DevTools 中也不起作用。Element.scrollIntoView()也适用于您的用例吗?

然后它最终会变成这样:

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

(async () => {
  const browser = await playwright.chromium.launch();
  const context = await browser.newContext({
    viewport: {
      width: 1200,
      height: 500
    }
  });
  const page = await context.newPage();
  await page.goto("https://sapui5.hana.ondemand.com/test-resources/sap/m/demokit/orderbrowser/webapp/test/mockServer.html?sap-ui-theme=sap_fiori_3#");

  await page.waitForSelector("#__item0-__clone9-content");

  await scrollOnElement(page, "#__item0-__clone9-content");
  await page.screenshot({ path: "screenshot.png" })
})();

async function scrollOnElement(page, selector) {
  await page.$eval(selector, (element) => {
    element.scrollIntoView();
  });
}

互动:https ://try.playwright.tech/?s=jp8ng

于 2020-06-19T11:35:46.677 回答