Web自動化測試之playwright:pages、popup、dialog和frame處理


本文介紹如何使用playwright來處理新頁面、frame以及對話框。

新頁面窗口

獲取瀏覽器上下文產生的新頁面,也就是通過 target="_blank" 鏈接打開的新窗口。

with context.expect_page() as new_page_info:
    page.click('a[target="_blank"]') 
new_page = new_page_info.value
new_page.wait_for_load_state()

點擊【立即注冊】會打開一個新的頁面:

下面代碼實現打開百度,點擊登錄,進入注冊界面

from time import sleep

from playwright.sync_api import sync_playwright

class TestDemo():
    def setup(self):
        playwright = sync_playwright().start()
        self.browser = playwright.chromium.launch(headless=False)
        self.context = self.browser.new_context()
        self.page = self.context.new_page()

    def teardown(self):
        self.browser.close()

    def test_click(self):
        self.page.goto("http://www.baidu.com")

        self.page.click('id=s-top-loginbtn')

        with self.context.expect_page() as new_page_info:
            self.page.click('"立即注冊"') # Opens a new tab
        register_page = new_page_info.value

        register_page.wait_for_load_state()
        print(register_page.title())
        # 注冊用戶名密碼
        register_page.fill("id=TANGRAM__PSP_4__userName", "username")
        register_page.fill("id=TANGRAM__PSP_4__phone", "12345678")
        register_page.close()
        sleep(2)

        # 登錄用戶名密碼
        self.page.fill("id=TANGRAM__PSP_11__userName", "username")
        self.page.fill("id=TANGRAM__PSP_11__password", "pwd")
        sleep(2)

playwright不像selenium那樣在有頭模式下可以切換窗口,它默認是無頭模式的,直接對對應的頁面對象進行操作就可以了。

selenium窗口切換參考Selenium switch_to方法

彈框處理

頁面中的彈框(popup)是很常見的,處理方法和打開新頁面類似:

with page.expect_popup() as popup_info:
    page.click("#open")
popup = popup_info.value

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

對話框處理

常見對話框包括alert(), confirm(), prompt()等,默認情況下,Playwright會取消對話框,可以通過在觸發對話框之前注冊一個對話框句柄:

page.on("dialog", lambda dialog: dialog.accept())
page.click("button")

dialog測試地址:https://sahitest.com/demo/confirmTest.htm

def test_dialog(self):
    self.page.goto("https://sahitest.com/demo/confirmTest.htm")
    self.page.click('[name="b1"]') # 默認取消對話框

    # 接受對話框
    self.page.on("dialog", lambda dialog: dialog.accept())
    self.page.click('[name="b1"]')
    sleep(5)

frame切換

獲取frame方法如下:

# 通過frame的name屬性
frame = page.frame('frame-login')
# 通過frame的URL
frame = page.frame(url=r'.*domain.*')
# 通過選擇器selector
frame_element_handle = page.query_selector('.frame-class')
frame = frame_element_handle.content_frame()

參考:

  1. https://playwright.dev/python/docs/frames
  2. https://playwright.dev/python/docs/dialogs
--THE END--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM