等待操作
playwright自带自动等待机制,你不需要显式写等待代码,Playwright 会在执行动作(如点击、输入)前自动等待元素处于可操作状态。
python
#方法一:
locator = page.locator("#submitId")
locator.wait_for(state="visible",timeout=10000)#默认30s,可手动单独设置如10s
#方法二:
page.wait_for_selector("#result", state="visible")
#方法三
# 等待 DOM 树构建完成(最常用,性能好)
page.wait_for_load_state("domcontentloaded")
# 等待所有资源(图片、CSS、JS)加载完毕
page.wait_for_load_state("load")
# 等待网络空闲(500ms无请求)。如果有轮询接口,会卡到超时!
page.wait_for_load_state("networkidle")
#等待跳转到相应的url
page.wait_for_url("**/ownerNotice")#这块不需要写全url,使用通配符**/ownerNotice
#强制等待类似time.sleep(3)
page.wait_for_timeout(3000)
代码实现:
python
import time
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser=p.chromium.launch(headless=False)
page=browser.new_page(viewport={"width": 1920, "height": 1080})
page.goto("https://yxf.cc.com/admin-tenant/#/login")
time.sleep(3)
page.get_by_placeholder("请输入企业号").fill("ydhl")
page.get_by_placeholder("请输入用户名").fill("ydhl")
page.get_by_placeholder("请输入密码").fill("Ydhl123456")
page.get_by_role("button", name="登录").click()
page.wait_for_url("**/index") # 不适用全url,方便代码编写,方便代码移植
print("登录成功,当前页面:", page.url)
page.get_by_text("甘飞梅原点演示").hover()#鼠标悬浮
logout_btn = page.get_by_text("退出登录") #退出登陆元素定位
logout_btn.wait_for(state="visible") #等待他可见状态
# 点击退出
logout_btn.click()
print("退出成功,登陆页面",page.url)
browser.close()
测试结果:

多用户操作
可实现多个用户操作,两个用户同时操作;
python
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
# 创建两个独立的上下文(模拟两个独立用户)
context_userA = browser.new_context()
context_userB = browser.new_context()
page_userA = context_userA.new_page()
page_userB = context_userB.new_page()
# 两个页面的登录状态互不影响
page_userA.goto("https://cc/login")
page_userB.goto("https://cc/login")
# 用户A登录
page_userA.get_by_placeholder("请输入登录账号").fill("13426251955")
page_userA.get_by_placeholder("密码").fill("13426251955")
page_userA.locator("//button[@type='submit']").click()
#用户B登录
page_userB.get_by_placeholder("请输入登录账号").fill("13426251956")
page_userB.get_by_placeholder("密码").fill("13426251956")
page_userB.locator("//button[@type='submit']").click()
context_userB.close()
context_userA.close()
browser.close()