Playwright——Web自动化新宠

初识Playwright——Web自动化新宠

课程目标

  • 理解Playwright是什么以及它的优势。
  • 学会安装Playwright及其浏览器驱动。
  • 掌握Playwright的基本使用方法
  • 学习如何生成和运行自动化测试脚本。
  • 学会创建和管理浏览器上下文。
  • 掌握页面导航、元素定位和事件监听。

课程内容

1. Playwright简介

Playwright是一款强大的自动化测试工具,支持现代Web应用程序的自动化测试。它支持以下浏览器:

  • Chromium
  • Firefox
  • WebKit
2. 安装Playwright

我们可以通过pip或conda来安装Playwright。以下是安装命令:

# 使用pip安装
pip install playwright
playwright install

# 使用conda安装
conda install playwright -c conda-forge
playwright install
3. 基本使用
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto('http://www.baidu.com')
    print(page.title())
    browser.close()
4. 浏览器上下文

浏览器上下文允许我们在隔离的环境中运行测试,每个上下文都是独立的。

创建浏览器上下文示例:

# 同步模式
context = browser.new_context()
5. 页面导航和元素交互

我们可以在页面上执行点击、填写表单等操作。

页面导航和元素交互示例:

page.goto('https://example.com/login')
page.fill('input[name="username"]', 'user1')
page.click('text=Sign in')
元素定位
  • ID选择器:使用page.locator(‘#my-id’)可以定位页面上id为"my-id"的元素。

  • 类选择器:使用page.locator(‘.my-class’)可以定位页面上所有具有"my-class"类的元素。

  • 标签名选择器:使用page.locator(‘div’)可以定位页面上所有的div元素。

  • 链式定位:page.locator()的返回值本身也有locator()方法,可以链式地定位元素,例如page.locator(‘.my-class’).locator(‘.my-subclass’)会定位到所有具有"my-class"类的元素中,再次具有"my-subclass"类的元素。

  • 文本内容:使用page.locator(‘:text(“my text”)’)来定位包含特定文本的元素,例如page.locator(‘:text(“Hello, World!”)’)可以定位页面上所有包含"Hello, World!"文本的元素。

  • 特性选择器:使用page.locator(‘input[name=“username”]’)可以定位页面上所有name属性为"username"的input元素。


获取值

在Python的Playwright中,获取页面上的数据内容可以通过以下几种方法:

  1. 获取文本内容:使用inner_text()方法获取元素的文本内容。

    text = page.locator('#my-id').inner_text()
    
  2. 获取HTML内容:使用inner_html()方法获取元素的HTML内容。

    html_content = page.locator('#my-id').inner_html()
    
  3. 获取属性值:使用get_attribute('attribute_name')方法获取元素的特定属性值。

    value = page.locator('#my-id').get_attribute('value')
    
拖动
# 定位源元素
source = page.locator("#source-element")

# 指定拖动的目标位置,以像素为单位
target_x = 100  # 目标元素的x坐标
target_y = 200  # 目标元素的y坐标

# 执行拖动操作到指定位置
page.mouse.drag_and_drop_by(source, target_x, target_y)
等待

在Python的Playwright中,等待(Waiting)是一种重要的机制,用于确保在执行某些操作之前页面达到了某个特定的状态。以下是一些常用的等待方法:

  1. 等待页面加载完成
page.wait_for_load_state()

wait_for_load_state参数说明:

  • state (可选): 等待的加载状态,可以是以下三种之一:

    • ‘load’: 等待load事件被触发。
    • ‘domcontentloaded’: 等待DOMContentLoaded事件被触发。
    • ‘networkidle’: 不推荐使用,等待至少500毫秒内没有网络连接。不要在测试中使用这个方法来等待页面加载完成,而应该依赖Web断言来评估页面的准备情况。 如果不指定,默认为’load’。
  • timeout (可选): 操作的最大时间(以毫秒为单位)。默认为30秒,传递0可以禁用超时。默认值可以通过browser_context.set_default_navigation_timeout()、browser_context.set_default_timeout()、page.set_default_navigation_timeout()或page.set_default_timeout()方法进行更改。

  1. 等待元素加载完成
element = page.locator(".Title--title--jCOPvpf")
element.wait_for()

wait_for参数:

  • timeout: 可选参数,表示等待元素满足条件的最大时间(以毫秒为单位)。默认值为None,这意味着如果没有指定,将使用默认的超时时间,通常是30000毫秒(30秒)。可以通过- browser_context.set_default_timeout()或page.set_default_timeout()方法来改变默认的超时时间。如果传入0,则表示没有超时限制。
  • state: 可选参数,表示等待元素达到的状态。默认值为’visible’。可以是以下几种状态之一:
    • ‘attached’:等待元素出现在DOM中。
    • ‘detached’:等待元素不在DOM中。
    • ‘visible’:等待元素具有非空的边界框,并且没有设置visibility:hidden。注意,如果没有内容或设置了display:none的元素,其边界框为空,不被认为是可见的。
    • ‘hidden’:等待元素要么不在DOM中,要么边界框为空,或者设置了visibility:hidden。这与’visible’选项相反。
  1. 等待元素可被选择
page.wait_for_selector(".Card--doubleCard--wznk5U4")
截图
  • 对整个页面截图
    page.screenshot(path='screenshot.png')  # 保存截图
    
  • 对特定元素截图
    element = page.locator('selector')  # 定位到元素
    element.screenshot(path='element_screenshot.png')  # 对该元素截图并保存
    
滚轮
page.mouse.wheel(0, 8000) # 将滚动条拉到最下保证数据加载 
7. cookies管理
保存cookies
import json
import re
from playwright.sync_api import Playwright, sync_playwright, expect
import time
import pandas as pd
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://uland.taobao.com/sem/tbsearch")
    storage_state = context.storage_state()
    with open("cookies.json", 'w') as f:
        json.dump(storage_state, f)
with sync_playwright() as playwright:
    run(playwright)
加载cookies
import json
import re
from playwright.sync_api import Playwright, sync_playwright, expect
import time
import pandas as pd
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    with open("cookies.json", 'r') as f:
        storage_state = json.load(f)
    context = browser.new_context(storage_state=storage_state)
    page = context.new_page()
    page.goto("https://uland.taobao.com/sem/tbsearch")
    pass
with sync_playwright() as playwright:
    run(playwright)
8. 录制自动化脚本

Playwright可以生成自动化测试脚本。

playwright codegen https://example.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值