Ответы пользователя по тегу Playwright
  • Как отключить автоматическое завершение работы браузера при выходе из функции в Playwright?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Привет!

    Не очень понял трактовку твоего вопроса
    Я просто не могу выделить части кода в отдельные методы. Мне нужно чтобы мой код размещался в разных методах...


    Если ты хочешь сделать распределение твоего кода по разным методам таким образом, чтобы сессия браузера смогла выполняться дальше при переходе между методами, то как минимум стоит сделать инициализацию браузера и страницы глобальными.

    Вот, например, так:

    IBrowser browser;
    IPage page;
    
    async Task InitializeBrowserAsync()
    {
        var playwright = await Playwright.CreateAsync();
        browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
        page = await browser.NewPageAsync();
    }
    
    async Task CreateRegistryAsync()
    {
        await page.GetByRole(AriaRole.Button, new() { Name = "Создать реестр" }).ClickAsync();
        string strKitCategory = templateSheet.GetCell(currentSheetRow, (int)ExcellTemplateTableSheet.ColumnType.kitCategory);
        await page.GetByText(strKitCategory).ClickAsync();
    }
    
    async Task FillDetailsAsync()
    {
        string rChKit = templateSheet.GetCell(currentSheetRow, (int)ExcellTemplateTableSheet.ColumnType.RCHKit);
        await page.GetByLabel("Комплект РЧ").FillAsync(rChKit);
        await page.GetByText(rChKit).ClickAsync();
    }
    
    async Task SubmitRegistryAsync()
    {
        string worcksDescription = templateSheet.GetCell(currentSheetRow, (int)ExcellTemplateTableSheet.ColumnType.descriptionOfWorks);
        await page.GetByLabel("Описание работ").FillAsync(worcksDescription);
        await page.GetByRole(AriaRole.Button, new() { Name = "Создать", Exact = true }).ClickAsync();
    }
    
    async Task MainAsync()
    {
        await InitializeBrowserAsync();
        await CreateRegistryAsync();
        await FillDetailsAsync();
        await SubmitRegistryAsync();
    }


    Если важно сохранять не только браузер, но и сессию пользователя, можешь использовать persistent context:

    async Task InitializePersistentContextAsync()
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchPersistentContextAsync("PATH", new BrowserTypeLaunchPersistentContextOptions { Headless = false });
        page = browser.Pages.First();
    }
    Ответ написан