昨天的文章发出来以后, 有测试的小伙伴让田老师说说Playwright和Selenium的区别。
其实这两个框架本身都非常强大,且都旨在自动化 Web 应用程序测试,但它们在方法和功能上有所不同。在此博客中,田老师将试图站在一个公允的态度上,比较 Selenium 和 Playwright,以帮助您确定哪个框架适合您的测试需求。
1 Introduction 概述
Selenium 已经存在了十多年,并在行业中得到广泛应用。它是一个支持多种编程语言和平台的开源测试自动化框架。 Selenium 使用 WebDriver 来自动化 Web 浏览器,允许开发人员编写与网页和元素交互的测试。
而Playwright 是由 Microsoft 开发的较新的框架。它旨在简化为 Web 应用程序编写端到端测试的过程。 Playwright 支持多种编程语言和平台,并且可以在无头或非无头模式下自动化 Web 浏览器。与 Selenium 不同,Playwright 提供了一个高级 API,可以简化编写测试的过程。
2 Features 特性
Selenium 和 Playwright 都具有相似的特性,例如支持多种编程语言、跨浏览器测试和屏幕截图。但是,Playwright 有一些 Selenium 所没有的特性:
2.1 Multiple Browsers 多浏览器
Playwright 支持多种网络浏览器内核,包括 Chromium、Firefox 和 WebKit。 Selenium 也支持多种浏览器,但仅限于 Chrome、Firefox、Safari、Internet Explorer 和 Edge。
在这里要注意他们之间的区别,一个是浏览器内核一个是浏览器,也就是说,在Playwright上, Chrome、Opera以及新版的Edge浏览器在画面表现上基本是一致的。
我们都知道程序员的噩梦IE, 不止是IE,我们所有的现在正在用的浏览器有一天都会成为所谓的“旧版本”,对于这些特殊的版本,Playwright也提供了
executablePath
进行支持。
2.2 Cross-Platform Testing 跨平台测试
Selenium 和 Playwright 都能够在多个平台上运行测试,包括 Windows、macOS 和 Linux。但是,这两个框架在处理跨平台测试的方式上存在一些差异。
Selenium 依赖于 WebDriver 协议,这是一种用于自动化 Web 浏览器的标准 API。每个浏览器供应商都提供自己的 WebDriver API 实现,这有时会导致跨平台的行为差异。这意味着在使用 Selenium 时,您可能需要编写特定于平台的代码来处理这些差异。例如,您可能需要针对不同的浏览器或操作系统使用不同的选择器或等待时间。
Playwright 提供了跨所有平台的一致 API,使得编写跨平台测试变得更加容易。 Playwright 抽象出底层浏览器的实现细节,并提供一个 API 来与所有支持的浏览器进行交互。这意味着您可以编写相同的测试代码并期望它在所有平台上表现一致。
Playwright 在跨平台测试中的另一个优势是它在所有平台上都支持 headless 和 non-headless 模式。这允许您在图形用户界面不可用的平台上的无头环境中运行测试。
与 Selenium 相比,Playwright 为跨平台测试提供了更加一致和简化的体验。它抽象出底层浏览器的实现细节,并提供一个单一的、统一的 API 来与所有支持的浏览器进行交互。这可以在编写测试时节省您的时间和精力,并确保您的测试在所有平台上的行为一致。
2.3 Automatic Waiting 自动等待
Playwright 具有内置的自动等待功能,这意味着它会等待元素出现在页面上,然后再与它们交互。 Selenium 要求开发人员在他们的测试中添加明確的等待设定,以处理等待问题。
当然, Playwright在等待上也并不是绝对完美的。 田老师在实际自动化测试代码中,也涉及到手动等待的问题。
2.4 Syntax 语法/代码书写
Selenium 使用低级 API,需要开发人员编写更多代码才能与网页上的元素进行交互。例如,要使用 Selenium 单击按钮,开发人员需要定位按钮元素,然后调用
click()
方法。这是一个例子:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.example.com")
button = browser.find_element_by_id("button")
button.click()
Playwright 提供了一个高级 API,可简化与网页上的元素交互的过程。例如,要使用 Playwright 单击按钮,开发人员可以直接在元素对象上使用
click()
方法。这是一个例子:
from playwright.sync_api import Playwright, sync_playwright
with sync_playwright()as playwright:
browser = playwright.chromium.launch()
page = browser.new_page()
page.goto("https://www.example.com")
button = page.locator("#button")
button.click()
browser.close()
2.5 Performance 效率
在性能方面,Playwright 比 Selenium 更快。 Playwright 使用单个浏览器实例来运行测试,减少了创建和销毁浏览器实例的开销。另一方面,Selenium 为每个测试创建一个新的浏览器实例,这会减慢测试执行速度。
3 结论
总体而言,Selenium 和 Playwright 之间的选择取决于您的测试需求和偏好。如果您已经在使用 Selenium 并且熟悉它的语法,那么坚持使用 Selenium 可能会更容易。但是,如果您正在寻找一种更现代、更高效的框架,它提供简化的语法并支持更多的浏览器和平台,那么 Playwright 可能是更好的选择。
这里田老师要强调的一件事是:Playwright 是一个比 Selenium 更新的框架,可能没有那么多的资源或来自社区,尤其是中文社区的支持。 然而,鉴于它与微软的关系,它可能会在未来几年继续发展并受到欢迎。
总之,Selenium 和 Playwright 都是用于 Web 应用程序测试的出色框架,并且各有优缺点。您可以根据功能、语法和性能来决定哪一个最适合您的需求。
版权归原作者 田辛 | 田豆芽 所有, 如有侵权,请联系我们删除。