最强自动化测试框架Playwright(4)-上下文及窗口处理

browser.new_context() 创建一个新的浏览器上下文。它不会与其他浏览器上下文共享 cookies/缓存。

context之间是相互隔离的,可以理解为轻量级的浏览器实例

多浏览器窗口

创建一个context相当于打开一个新的浏览器窗口

如下代码打开两个浏览器窗口:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False, slow_mo=1000)
    context1 = browser.new_context()  # 创建上下文,浏览器实例1
    context2 = browser.new_context()  # 创建上下文,浏览器实例2
    page1 = context1.new_page()    # 打开标签页1
    page1.goto("https://www.baidu.com/")

    # 操作第二个浏览器窗口
    page2 = context2.new_page()  # 打开标签页1
    page2.goto("https://www.baidu.com/")

创建一个page页面相当于打开一个新的标签页

多标签页

每个浏览器上下文可以承载多个页面(选项卡)。

  • 每个页面都像一个聚焦的活动页面。

    不需要将页面置于最前面。

如下代码打开两个tab标签页


from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False, slow_mo=1000)
    context = browser.new_context()  # 创建上下文,浏览器实例
    page = context.new_page()    # 打开标签页1
    page.goto("https://www.baidu.com/")
    page2 = context.new_page()  # 打开标签页2
    page2.goto("https://www.sina.com/")

    context.close()
    browser.close()

浏览器上下文还可用于模拟涉及移动设备、权限、区域设置和配色方案的多页面场景

Playwright 可以在一个场景中创建多个浏览器上下文。当您想测试多用户功能(如聊天)时,这很有用。

python+playwright 学习-5.new_context上下文与新窗口操作

新标签页

浏览器上下文中的事件page可用于获取在上下文中创建的新页面。这可用于处理通过target=”_blank”链接打开的新页面。

from playwright.sync_api import sync_playwright


with sync_playwright() as p:
    browser = p.chromium.launch(headless=False, slow_mo=1000)
    context = browser.new_context()  # 创建上下文,浏览器实例

    page = context.new_page()    # 打开标签页
    page.goto("https://www.baidu.com/")
    print(page.title())
    # Get page after a specific action (e.g. clicking a link)
    with context.expect_page() as new_page_info:
        page.click('text=新闻')  # Opens a new tab
    new_page = new_page_info.value

    new_page.wait_for_load_state()  # 等待页面加载到指定状态
    print(new_page.title())

处理弹出窗口

如果页面打开一个弹出窗口(例如通过链接打开的页面),您可以通过监听页面上的事件target=”_blank”来获取对它的引用。popup
除了browserContext.on(‘page’)事件之外还会发出此事件,但仅针对与此页面相关的弹出窗口。

# Get popup after a specific action (e.g., click)
with page.expect_popup() as popup_info:
    page.get_by_text("open the popup").click()
popup = popup_info.value

popup.wait_for_load_state()
print(popup.title())

猜你喜欢

转载自blog.csdn.net/seanyang_/article/details/132240612
今日推荐