Hi everyone. I want all the pages with different contexts open in the same browser . How should I fix my code ? Thanks for your help .
from playwright.async_api import BrowserContext import asyncio from playwright.async_api import async_playwright import time
async def main(queryList : list ): try: async with async_playwright() as p: ff = p.firefox browser = await ff.launch(headless=False) tastList = [run(await browser.new_context(), queryList[i]) for i in range(len(queryList))] results = await asyncio.gather(*tastList)
#print(results)
return extract_data(await loc1.inner_text())
except Exception as e:
print(e)
return None
async def run(context : BrowserContext , query:str): global loc1 try: page = await context.new_page() await page.goto("https://xxxxxxx.com/checker") await page.get_by_placeholder("Enter query").click() await page.get_by_placeholder("Enter query").fill("some word") loc1 = page.get_by_role("dialog") #print(await loc1.inner_text()) return extract_data(await loc1.inner_text()) except Exception as e: print(e) return None
This thread is trying to answer question "How to let the different context open in different Tab but in the same browser?"
Related Ask AI answer for "How can I open multiple pages in the same browser window using Playwright's JavaScript/TypeScript API?".
First, you'll need to create a new browser context. This creates a separate environment for your pages to run in.
const { chromium } = require('@playwright/test');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
})();
Next, create multiple pages within the same context. Each page represents a separate tab or popup window within the browser.
const pageOne = await context.newPage();
const pageTwo = await context.newPage();
You can navigate to different URLs and interact with each page individually.
await pageOne.goto('https://ray.run');
await pageTwo.goto('https://ray.run/blog');
To handle new pages that are opened by links with target="_blank"
, use the waitForEvent()
method on your context object.
const newPagePromise = context.waitForEvent('page');
await pageOne.click('a[target="_blank"]');
const newPage = await newPagePromise;
Ensure that all pages are loaded before performing any actions. You can use methods like waitForLoadState()
or check for specific elements on each page.
await Promise.all([
pageOne.waitForLoadState(),
]);
By following these steps, you can have multiple pages with different contexts open in the same browser window and perform actions on them individually. Remember to handle any errors or exceptions that may occur during the execution of your code.
Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email [email protected].