最強自動化測試框架Playwright(20)- iframe

一個頁面可以附加一個或多個?Frame?對象。每個頁面都有一個主框架,并且假定頁面級交互(如)在主框架中運行。click

frame_locator

使用 iframe 時,可以創建一個框架定位器,該定位器將進入 iframe 并允許選擇該 iframe 中的元素。

# Locate element inside frame
# Get frame using any other selector
username = page.frame_locator('.frame-class').get_by_label('User Name')
username.fill('John')

上面代碼,先定位frame,然后定位frame里的元素,并對元素進行輸入操作。

示例:

html文件

<!DOCTYPE html>
<html>
<head><title>IFrame Example</title>
</head>
<body><h1>IFrame Example</h1><p>This is an example of using an iframe.</p><iframe src="https://pity.fun/#/dashboard/workspace" frameborder="0" width="100%" height="500"></iframe>
</body>
</html>

這個html頁面有一個iframe

from playwright.sync_api import sync_playwright, expectdef run(playwright):chromium = playwright.chromiumbrowser = chromium.launch(headless=False)page = browser.new_page()page.goto(r'C:\Users\Desktop\download.html')page.frame_locator("iframe").get_by_placeholder("用戶名: tester").fill("tester")page.frame_locator("iframe").get_by_placeholder("密碼: tester").fill("tester")page.frame_locator("iframe").get_by_role("button", name="登 錄").click()expect( page.frame_locator("iframe").get_by_title("工作臺")).to_be_visible()with sync_playwright() as p:run(p)

如果要對iframe里元素進行操作,就需要先用frame_locator來定位iframe,再定位iframe里的元素。

?frame

可以使用?page.frame()?返回匹配的frame。

需要指定frame的name或者url。

# Get frame using the frame's name attribute
frame = page.frame('frame-login')# Get frame using frame's URL
frame = page.frame(url=r'.*domain.*')# Interact with the frame
frame.fill('#username-input', 'John')

frame tree

頁面都通過page.main_frame和frame.child_frames方法公開其當前框架樹。

框架對象的生命周期由三個事件控制,這些事件在頁面對象上調度:

  • page.on(“frameattached”)?- 當框架附加到頁面時觸發。一個框架只能附加到頁面一次。
  • page.on(“framenavigated”)?- 當框架提交導航到其他 URL 時觸發。
  • page.on(“framedetached”)?- 當框架從頁面分離時觸發。一個框架只能從頁面分離一次。

from playwright.sync_api import sync_playwrightdef run(playwright):firefox = playwright.firefoxbrowser = firefox.launch()page = browser.new_page()page.goto("https://www.theverge.com")dump_frame_tree(page.main_frame, "")browser.close()def dump_frame_tree(frame, indent):print(indent + frame.name + '@' + frame.url)for child in frame.child_frames:dump_frame_tree(child, indent + "    ")with sync_playwright() as playwright:run(playwright)

add_script_tag?

frame.add_script_tag()?方法在頁面中添加一個腳本標簽:

下面是一個例子,演示如何使用 playwright 的 `frame.add_script_tag()` 方法在頁面中添加一個腳本標簽:

from playwright.sync_api import Playwright, sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto('https://www.example.com')# 在頁面中添加一個腳本標簽page.main_frame().add_script_tag(url='https://code.jquery.com/jquery-3.6.0.min.js')# 在頁面中執行添加的腳本page.evaluate('console.log(jQuery.fn.jquery)')browser.close()

在上面的代碼中,首先創建了一個 `browser` 實例和一個 `page` 實例,并跳轉到指定的網址。然后使用 `page.main_frame().add_script_tag()` 方法添加了一個 jQuery 的腳本標簽,這個腳本標簽的 URL 是 `https://code.jquery.com/jquery-3.6.0.min.js`。最后使用 `page.evaluate()` 方法在頁面上執行添加的腳本,輸出了 jQuery 的版本號。

add_style_tag

在樣式表的加載觸發或將 CSS 內容注入框架時返回添加的標記。

將具有所需 URL 的標記或包含內容的標記添加到頁面中。<link rel="stylesheet"><style type="text/css">

用法

frame.add_style_tag()
frame.add_style_tag(**kwargs)

content

獲取框架的完整 HTML 內容,包括文檔類型。

frame.content()

drag_and_drop

frame.drag_and_drop(source, target)
frame.drag_and_drop(source, target, **kwargs)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35443.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

idea模板的使用(配置xml文件模板)

1. 問題的引出 我們在日常項目中可以發現&#xff0c;sql映射文件和mybatis主配置文件&#xff0c;以及application.yml文件中有很多固定不變的內容&#xff0c;為了方面使用&#xff0c;所以可以把這些xml文件設置為模板 2. 創建模板的步驟 按照圖片一步一步進行即可 點擊…

gcc編譯選項之預處理向源碼傳參和條件編譯

一、是什么? 預處理:是指在進行加工前準備工作. gcc 選項 文件名字 二、使用步驟 1.向源碼傳參 gcc -save-temps -DSENSOR_TYPE=SONY_IMX477_MIPI_8M_30FPS_12BIT hello.c -o hello 代碼如下(示例): #include <stdio.h> #include <stdlib.h>typedef enum …

acwing 平衡括號字符串 貪心 括號序列

&#x1f468;?&#x1f3eb; 平衡括號字符串 給定一個字符串 s s s&#xff0c;該字符串的每個字符都是 (、) 或 # 之一。 你的任務是將 s s s 中的每個 # 變換為一個或多個 )&#xff0c;從而得到一個平衡括號字符串。 不同 # 變換的 ) 的數量可以不同。 請你輸出為了…

數據容器——元組(tuple)

1、元組與列表的不同點 列表是可以修改的。如果想要傳遞的信息&#xff0c;不被算改&#xff0c;列表就不合適了。 元組同列表一樣&#xff0c;都是可以封裝多個、不同類型的元素在內。 但最大的不同點在于&#xff1a;元組一旦定義完成&#xff0c;就不可修改 所以&#xff…

2023河南萌新聯賽第(五)場:鄭州輕工業大學 --01分數規劃

題目描述 給定一個字符串 s&#xff0c;僅含 0, 1, ? 三種字符&#xff0c;你必須將所有 ? 替換為 1 或 0 。 定義 s 的美好值為將所有?進行替換后&#xff0c;s的最長連續 1 或 0 的子串的長度。請你進行所有替換后&#xff0c;使得字符串 s 的美好值最大&#xff0c;請輸…

(二)結構型模式:1、適配器模式(Adapter Pattern)(C++實現示例)

目錄 1、適配器模式&#xff08;Adapter Pattern&#xff09;含義 2、適配器模式應用場景 3、適配器模式的UML圖學習 4、C實現適配器模式的示例 1、適配器模式&#xff08;Adapter Pattern&#xff09;含義 將一個接口轉換為客戶端所期待的接口&#xff0c;從而使兩個接口…

CompletableFuture

java8中新引入了批量線程處理類CompletableFuture CompletableFuture.allOf是與的關系, 每個都要執行完 CompletableFuture.anyOf是或的關系, 其中一個執行完 以下示例代碼: CompletableFuture.allOf(CompletableFuture.runAsync(() -> {Thread.currentThread().setName(&q…

js常用的方法函數

JavaScript 中有許多常用的內置方法和函數&#xff0c;用于處理字符串、數組、對象、日期等不同類型的數據。以下是一些常見的 JavaScript 方法和函數&#xff1a; 字符串操作&#xff1a; str.length: 返回字符串的長度。 str.charAt(index): 返回指定位置的字符。 str.indexO…

Mac安裝nvm教程及使用

nvm 是 node 版本管理器&#xff0c;也就是說一個 nvm 可以管理多個 node 版本&#xff08;包含 npm 與 npx&#xff09;&#xff0c;可以方便快捷的安裝、切換 不同版本的 node。 1、直接通過brew安裝 執行命令&#xff1a;brew install nvm PS&#xff1a; 如果沒有安裝br…

Golang - 生成和讀取toml文件

代碼示例&#xff1a; package mainimport ("fmt""github.com/pelletier/go-toml""os""path" )func CreateToml(tomlPath string) {tree, err : toml.Load("")if err ! nil {fmt.Println("Error while creating empt…

Oracle database 靜默安裝 oracle 11g 一鍵安裝

基于oracle安裝包中應答文件實現一鍵安裝 支持環境&#xff1a; Linux &#xff1a;centerOS 7 oracle &#xff1a;11.2.0 Oracle應答文件 runInstaller應答文件 /database/response/db_install.rsp netca應答文件 /database/response/netca.rsp dbca應答文件 /database/re…

小程序保留2位小數據,不四舍五入

方法1&#xff1a; parseInt toFixed /* * 保留2位小數&#xff0c;不四舍五入 * 5.992550 >5.99 , 2 > 2.00 * */ const toFixed2Decimal (value) > {return (parseInt(value*100)/100).toFixed(2) } console.log(587.67*100) console.log(toFixed2Decimal(587.67…

python中的運算符號含義,python基本運算符的操作

本篇文章給大家談談python的運算符號有哪些類型&#xff0c;以及python各運算符號的功能說明&#xff0c;希望對各位有所幫助&#xff0c;不要忘了收藏本站喔。 1.算數運算符&#xff08;最常見的&#xff09; 標準算數運算符&#xff08;加減乘除&#xff09; 取余運算…

(provider: SSL Provider, error: 0 - 證書鏈是由不受信任的頒發機構頒發的。)

問題描述 NET6 Code First 使用Update-database時 報錯&#xff1a;A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 證書鏈是由不受信任的頒發機構頒發的。) 解決方…

UML-狀態圖

目錄 狀態圖 狀態圖的圖符 狀態機 狀態 ?轉換 電話機狀態圖 活動圖和狀態圖區別&#xff1a; 狀態圖 狀態圖(Statechart Diagram)是描述一個實體基于事件反應的動態行為&#xff0c;顯示了該實體如何根據當前所處的狀態對不同的事件做出反應。通常我們創建一個UML狀態…

Jmeter設置中文的兩種方式,建議使用第二種

方案一 進入jmeter圖像化界面&#xff0c;選擇Options下的Choose Language&#xff0c;再選擇Chinese(Simplified)。這個就是選擇語言為簡體中文&#xff08;缺陷&#xff1a;這個只是在本次使用時為中文&#xff0c;下次打開默認還是英文的&#xff09; 方案二&#xff08;…

Mybatis框架

Mybatis框架 Mybatis的含義&#xff1a;Mybatis框架是一個持久層框架&#xff0c;幾乎解決了jdbc代碼在手動設置參數和對結果集的手動獲取問題&#xff0c;原本是apache公司的開源項目&#xff0c;最后轉給Google公司。Mybatis會將參數封裝在一個對象中傳遞給數據庫&am…

數學建模(二)線性規劃

課程推薦&#xff1a;6 線性規劃模型基本原理與編程實現_嗶哩嗶哩_bilibili 目錄 一、線性規劃的實例與定義 1.1 線性規劃的實例 1.2 線性規劃的定義 1.3 最優解 1.4 線性規劃的Mathlab標準形式 1.5 使用linprog函數 二、線性規劃模型建模實戰與代碼 2.1 問題提出 2.2…

機器學習深度學習——seq2seq實現機器翻譯(詳細實現與原理推導)

&#x1f468;?&#x1f393;作者簡介&#xff1a;一位即將上大四&#xff0c;正專攻機器學習的保研er &#x1f30c;上期文章&#xff1a;機器學習&&深度學習——seq2seq實現機器翻譯&#xff08;數據集處理&#xff09; &#x1f4da;訂閱專欄&#xff1a;機器學習&…

機器學習編譯系列

機器學習編譯MLC 1. 引言2. 機器學習編譯--概述2.1 什么是機器學習編譯 1. 引言 陳天奇目前任教于CMU&#xff0c;研究方向為機器學習系統。他是TVM、MXNET、XGBoost的主要作者。2022年夏天&#xff0c;陳天奇在B站開設了《機器學習編譯》的課程。 ??《機器學習編譯》課程共分…