当前位置: 首页 > article >正文

python+playwright自动化测试(八):iframe切换、多窗口切换

目录

浏览器上下文context对象常用操作

设置默认导航时间

iframe切换

窗口切换


浏览器上下文context对象常用操作

context.pages :获取context所有page对象
context.new_page():生成一个新的page对象
context.add_cookies():将cookie添加到此浏览器上下文所在的所有页面中。
context.clear_cookies():清除context的cookie
context.grant_permissions():浏览器上下文的指定权限授权。
context.clear_permissions():清除授权。

context.close():关闭context

设置默认导航时间

page.set_default_navigation_timeout(2000) 

设置后对以下方法生效:
- `page.go_back()`
- `page.go_forward()`
- `page.goto()`
- `page.reload()`
- `page.set_content()`
- `page.expect_navigation()`
- `page.wait_for_url()`

iframe切换

在处理新的窗口、弹窗,iframe时,playwright处理方式比较简单,而selenium处理iframe比较麻烦。page.frame() 支持通过frame标签的name和url定位。

print(page.frames)  # 获取frames对象,返回一个列表

方法1:

    frame_one = page.frame(name='xxx')
    frame_one.locator('#pw').fill('123456')

方法2:

直接定位到frame后,再定位到上面的元素,在元素基础上进行操作。

    password = page.frame_locator('.frame').locator('#password-input')
    password.fill('123456')

窗口切换

每个窗口页面都有独立的title和URL,所以根据这两个属性找到对应页面进行窗口激活(切换)。

写一个切换窗口的方法:

def switch_to_page(context, title=None, url=None):
    for item_page in context.pages:
        if title:
            if title in item_page.title():
                item_page.bring_to_front()  # 激活选项卡
                return item_page
            else:
                print(f"未找到对应的title{title}窗口")
        if url:
            if url in item_page.url:
                item_page.bring_to_front()  # 激活选项卡
                return item_page
            else:
                print(f"未找到对应的url{url}窗口")
    return context.pages[0]
def documentManage(playwright: Playwright, url):
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto(url, timeout=50000)
    page.set_viewport_size({'width': 1920, 'height': 1080})

    windows = page.locator('xpath=//div[@class]//a').all()[200:210:2]  # 因为定位到上千个对象,这里挑选几个测试
    for w in windows:
        w.click()  # 点击打开新的窗口

    # for con in context.pages:
    #     print(con.title(), con.url)  # 测试打印出每个窗口的title和URL

    page_new = switch_to_page(context, url='https://www.aigc.cn/')  # 切换到指定窗口

    # print(page_new.title(), page_new.url)  # 打印切换后的窗口title和URL
    assert page_new.url == 'https://www.aigc.cn/'  # 断言是否切换正确


    page.wait_for_timeout(5000)
    context.close()
    browser.close()


with sync_playwright() as p:
    documentManage(p, 'https://www.aigc.cn/')

http://www.kler.cn/a/524253.html

相关文章:

  • Python NumPy(7):连接数组、分割数组、数组元素的添加与删除
  • MotionLCM 部署笔记
  • 17 一个高并发的系统架构如何设计
  • 基于ollama,langchain,springboot从零搭建知识库三【解析文档并存储到向量数据库】
  • 知识库管理驱动企业知识流动与工作协同创新模式
  • decison tree 决策树
  • Go Fx 框架使用指南:深入理解 Provide 和 Invoke 的区别
  • 单片机基础模块学习——AT24C02芯片
  • open-webui本地AI人工智能问答知识库搭建
  • 云计算与虚拟化技术讲解视频分享
  • 【赵渝强老师】K8s中Pod探针的ExecAction
  • Java基础知识总结(二十四)--Collections
  • 想品客老师的第五天:Map与WeakMap类型
  • 文本左右对齐
  • Linux shell脚本笔记-One
  • Promise.race
  • 在win11下搭建ios开发环境
  • javaweb复习总结
  • 算法随笔_27:最大宽度坡
  • AI学习(vscode+cline+deepseek)
  • 【MQ】如何保证消息队列的高性能?
  • DeepSeek LLM解读
  • cursor ide配置远程ssh qt c++开发环境过程记录
  • [内网安全] 内网渗透 - 学习手册
  • Android OpenGL(七)实现滤镜效果(特效渲染)
  • 让Android adb支持互联网调试脱离局域网