【问题标题】:How to do a POST Request with PlayWright如何使用 PlayWright 进行 POST 请求
【发布时间】:2020-09-29 08:02:37
【问题描述】:

我已经被这个问题困扰了一段时间。我需要测试一个网站,我需要发布信息以测试它是否出现在页面上。

我目前拥有的是这个

(async () => {
    const browser = await webkit.launch();
    const page = await browser.newPage();
    await page.route('http://100.100.100.100/', route => route.fulfill({
        status: 200,
        body: body,
    }));
    await page.goto('https://theurlofmywebsite/');
    await page.click('button')
    await page.click('text=Login with LoadTest')
    await page.fill('#Username','username')
    await page.fill('#Password','password')
    await page.click('#loginButton')
    // await page.waitForSelector('text=Dropdown');
    await page.click('css=span >> text=Test')
    await page.click('#root > div > div > header > ul.nav.navbar-nav.area-tabs > li:nth-child(6) > a','Test')
    await page.waitForSelector('text=Detail')
    await page.screenshot({ path: `example3.png` })
    await browser.close();
})();

const body = [ my json post request ]

【问题讨论】:

  • 您可以使用 page.evaluate 执行帖子
  • 您能详细说明问题所在吗?如果需要,可以参考这个例子:try.playwright.tech/?s=trqt9

标签: post request playwright


【解决方案1】:

1.19 版本看起来很简单。

test('get respons variable form post in Playwright', async ({ request }) => {
  const responsMy= await request.post(`/repos/${USER}/${REPO}/issues`, {
    data: {
      title: '[Bug] report 1',
      body: 'Bug description',
    }
  });
  expect(responsMy.ok()).toBeTruthy();
}

https://playwright.dev/docs/test-api-testing上查看更多信息

【讨论】:

    【解决方案2】:
    jest.setTimeout(1000000);
    let browser: any;
    let page: any;
    beforeAll(async () => {
        browser = await chromium.launch();
    });
    afterAll(async () => {
        await browser.close();
    });
    beforeEach(async () => {
        page = await browser.newPage();
    });
    afterEach(async () => {
        await page.close();
    });
    
    
    
    it("should work", async () => {
        await fetch("http://YOUAWESOMEURL", {
            method: "post",
            body: JSON.stringify(body),
        })
            .then((response) => console.log(response))
            .catch((error) => console.log(error));
        await page.goto("https://YOUAWESOMEURL");
        await page.click("button");
        await page.click("text=Login");
        await page.fill("#Username", "YOURUSERNAME");
        await page.fill("#Password", "YOURPASSWORD");
        await page.click("#loginButton");
        // await page.click("css=span >> text=Load Test");
        await page.click(
            "#root > div > div > header > ul.nav.navbar-nav.area-tabs > li:nth-child(6) > a >> text=Test"
        );
        await page.waitForSelector("text=SOMETEXTYOUWANTTOCHECKIFTHERE");
        // await page.waitForSelector(`text=SOMEOTHERTEXTYOUWANTTOCHECKIFTHERE`);
        // Another way to check for success
        // await expect(page).toHaveText(`SOMEOTHERTEXTYOUWANTTOCHECKIFTHERE`);
        console.log("test was successful!");
    });
    
    

    【讨论】:

    • 这就是我想做的,在测试中发起一个发布请求。这很简单,您只需在函数内部进行 fetch 即可。