自动化测试工具Playwright使用
·
下载Playwright
首先创建一个虚拟环境,然后再在虚拟环境中,使用pip下载Playwright包
pip install playwright
下载完成后,运行该命令将会下载所需的浏览器二进制文件,包括 Chromium、Firefox 和 WebKit。
一旦下载完成,您应该能够启动浏览器并正常执行 Playwright 脚本了。
playwright install
或者
python -m playwright install
Playwright教程
操作新建浏览器实例
这里模拟了新建一个浏览器实例,然后搜索词条,再打开这个词条,读取词条所有内容的操作
# -*- coding = utf-8 -*-
import time
from playwright.sync_api import sync_playwright
from datetime import datetime
def search(page):
try :
# 打开网址
page.goto('https://www.baidu.com')
# 根据id定位元素,并且输入内容test
page.locator("#kw").fill("test")
# 使用文本选择器定位包含特定文本的元素,并且点击元素
page.locator("text='百度一下'").click()
# 根据xpath定位元素,并且点击test百度词条
page.locator('//*[@id="3"]/div/h3/a/div/div/p/span/span').click()
# 如果点击的链接新打开一个窗口,定位到新打开的页面
new_page = context.wait_for_event("page")
# 等待页面完全加载
new_page.wait_for_load_state('load')
# 使用 CSS 选择器定位唯一类名的单个元素
test_element = new_page.locator('.para_YSJB6.summary_LggeX.MARK_MODULE')
test_text = test_element.inner_text()
print(test_text)
except Exception as e:
# 获取当前时间并格式化为字符串
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
# 创建截图文件名
screenshot_filename = f'error_call/search_{timestamp}.png'
# 保存截图
page.screenshot(path=screenshot_filename)
# 记录调用日志,以便后续分析
with open(f'error_call/search_{timestamp}.txt', 'w') as f:
f.write(str(e))
if __name__ == '__main__':
playwright = sync_playwright().start()
# browser = playwright.chromium.connect_over_cdp("http://127.0.0.1:9222")
# 使用with 语句运行 Playwright,同步启动和关闭 Playwright 实例。
with playwright.chromium.connect_over_cdp("http://127.0.0.1:9222") as browser:
# 通过9222端口连接到本地浏览器
# browser = playwright.chromium.connect_over_cdp("http://127.0.0.1:9222")
print(f"连接到本地浏览器状态:{browser.is_connected()}")
# 创建一个新的浏览器上下文。浏览器上下文类似于一个新的浏览器实例,它们之间互相隔离。
context = browser.contexts[0]
page = context.new_page()
# 执行登录操作,search 函数中包含具体的搜索逻辑。
search(page)
# 关闭页面
page.close()
# 关闭浏览器上下文
context.close()
|
连接到本地浏览器实例
这里模拟了连接到本地浏览器实例,然后搜索词条,再打开这个词条,读取词条所有内容的操作
在连接浏览器之前,需要先打开浏览器的远程调试端口9222,如果打开的是谷歌浏览器,可以在终端中用这个命令
open -a "Google Chrome" --args --remote-debugging-port=9222
# -*- coding = utf-8 -*-
import time
from playwright.sync_api import sync_playwright
from datetime import datetime
def search(page):
try :
# 打开网址
page.goto('https://www.baidu.com')
# 根据id定位元素,并且输入内容test
page.locator("#kw").fill("test")
# 使用文本选择器定位包含特定文本的元素,并且点击元素
page.locator("text='百度一下'").click()
# 根据xpath定位元素,并且点击test百度词条
page.locator('//*[@id="3"]/div/h3/a/div/div/p/span/span').click()
# 如果点击的链接新打开一个窗口,定位到新打开的页面
new_page = context.wait_for_event("page")
# 等待页面完全加载
new_page.wait_for_load_state('load')
# 使用 CSS 选择器定位唯一类名的单个元素
test_element = new_page.locator('.para_YSJB6.summary_LggeX.MARK_MODULE')
test_text = test_element.inner_text()
print(test_text)
except Exception as e:
# 获取当前时间并格式化为字符串
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
# 创建截图文件名
screenshot_filename = f'error_call/search_{timestamp}.png'
# 保存截图
page.screenshot(path=screenshot_filename)
# 记录调用日志,以便后续分析
with open(f'error_call/search_{timestamp}.txt', 'w') as f:
f.write(str(e))
if __name__ == '__main__':
playwright = sync_playwright().start()
# browser = playwright.chromium.connect_over_cdp("http://127.0.0.1:9222")
# 使用with 语句运行 Playwright,同步启动和关闭 Playwright 实例。
with playwright.chromium.connect_over_cdp("http://127.0.0.1:9222") as browser:
# 通过9222端口连接到本地浏览器
# browser = playwright.chromium.connect_over_cdp("http://127.0.0.1:9222")
print(f"连接到本地浏览器状态:{browser.is_connected()}")
# 创建一个新的浏览器上下文。浏览器上下文类似于一个新的浏览器实例,它们之间互相隔离。
context = browser.contexts[0]
page = context.new_page()
# 执行登录操作,search 函数中包含具体的搜索逻辑。
search(page)
# 关闭页面
page.close()
# 关闭浏览器上下文
context.close()
|
更多推荐
所有评论(0)