PlayWright中 frame_locator 和 frame

官方文档

Frames | Playwright Python

简单描述

页面上可以有很多 frame 框架,PlayWright 提供了 frame_locator 和 frame API 供用户使用。

示例

 PlayWright 提供了 main_frame 方法属性返回 当前页面的主框架。

一、 frame_locator

frame_locator() 和 其他方法大致一样,传入定位的表达式。返回一个 FrameLocator 对象。以下代码请注意是 那个 FrameLocator 对象调用的

    def test_access_frame_with_frame_locator(self):
        """
            测试更加深处的 frame
        :return:
        """
        self.page.goto("https://sahitest.com/demo/framesTest.htm")
        frame1 = self.page.frame_locator("//frame[@src='index.htm']").first
        frame1.locator("xpath=//a[text()='Frames Test']").click()
        self.page.screenshot(path='./第一个frame.png')

        frame2 = frame1.frame_locator("//frame[@src='index.htm']").last
        frame2.locator("xpath=//a[text()='Link Test']").click()
        self.page.screenshot(path='./第二个frame.png')

        frame3 = frame1.frame_locator("//frame[@src='index.htm']").first
        frame3.locator("xpath=//a[text()='Table Test']").click()
        self.page.screenshot(path='./第三个frame.png')

        with open('page.html', 'w') as fp:
            fp.write(self.page.content())

        main_frame = self.page.main_frame
        with open('main_frame.html', 'w') as fp:
            fp.write(main_frame.content())
        self.page.wait_for_timeout(3000)

二、 frame

frame() 需要传入必备的参数 name 或者 url 参数。返回一个 Frame对象。

1.  只操作一个frame

    def test_access_with_frame(self):
        self.page.goto("https://sahitest.com/demo/framesTest.htm")
        frame1 = self.page.frame(name='top')
        # frame1.locator("xpath=//a[text()='Table Test']").click()
        self.page.screenshot(path='./frame1.png')
        frame2 = self.page.frame(url='index.htm')
        frame2.locator("xpath=//a[text()='Link Test']").click()
        self.page.screenshot(path='./frame2.png')
        self.page.wait_for_timeout(3000)

2. 操作两个frame

这个就是比上面的多了在 frame1 中定位并操作了元素

    def test_access_with_frame(self):
        self.page.goto("https://sahitest.com/demo/framesTest.htm")
        frame1 = self.page.frame(name='top')
        frame1.locator("xpath=//a[text()='Table Test']").click()
        self.page.screenshot(path='./frame1.png')
        frame2 = self.page.frame(url='index.htm')
        frame2.locator("xpath=//a[text()='Link Test']").click()
        self.page.screenshot(path='./frame2.png')
        self.page.wait_for_timeout(3000)

对比

运行了这两段代码就会疑问?为什么多了个定位和操作方法。这两段代码frame1 和 frame2 的作用效果会不一样。也许是这个PlayWright的特点,待后续查看资料。

所有后面操作还是使用 frame_locator 来进行操作。虽然我写的 frame 接口相关的代码在实际中是很少遇到的。但是还得记录下!

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值