一个 Swift 库,用于通过与 WebDriver 端点(例如 Selenium、Appium 或 Windows Application Driver)通信,实现应用程序和浏览器的 UI 自动化。
swift-webdriver
旨在支持 Selenium 传统 JSON Wire 协议及其后继者,即 W3C 标准 WebDriver 协议,以对抗任何 WebDriver 端点。 在实践中,它已针对基于 Windows 的 WinAppDriver 场景进行了开发和测试,并且在其他环境中可能存在差距。
使用 WinAppDriver
的 swift-webdriver
“Hello world” 示例可能如下所示
let session = try Session(
webDriver: WinAppDriver.start(), // Requires WinAppDriver to be installed on the machine
desiredCapabilities: WinAppDriver.Capabilities.startApp(name: "notepad.exe"))
try session.findElement(locator: .name("close")).click()
要在您的项目中使用 swift-webdriver
,请在您的 Package.swift
文件中添加对其的引用,如下所示
let package = Package(
name: "MyPackage",
dependencies: [
.package(url: "https://github.com/thebrowsercompany/swift-webdriver", branch: "main")
],
targets: [
.testTarget(
name: "UITests",
dependencies: [
.product(name: "WebDriver", package: "swift-webdriver"),
]
)
]
)
使用 swift build
和 swift test
构建并运行测试,或使用 Visual Studio Code 的 Swift 扩展。
有关其他示例,请参阅 Tests\WebDriverTests
目录。
要使用 CMake 构建,请使用 Ninja 生成器
cmake -S . -B build -G Ninja
cmake --build .\build\
该库有两个逻辑层
WebDriver
和 Request
协议及其实现为向 WebDriver 端点发送 REST 请求提供了强类型表示。每个请求都由 Requests
下的结构体表示。如果需要,该库可以仅在此层使用和扩展。Session
和 Element
类型提供了 WebDriver 概念的面向对象表示,其中包含每个支持命令的直接函数,例如 findElement(id:)
和 click()
。在提供 WebDriver 端点特定功能(例如启动和使用 WinAppDriver 实例)的地方,代码尽可能与通用 WebDriver 功能分开。
对于 UI 测试,通常支持重试某些操作直到超时时间过去(以应对动画或异步)非常有用。 swift-webdriver
提供了两种这样的机制
findElement
操作将隐式等待一段时间,如果它们无法立即找到正在查询的元素。此功能内置于 WebDriver 协议中,但由驱动程序可选实现。对于不支持它的驱动程序,该库通过重复查询直到超时时间过去来模拟它。按照规范,此超时时间默认为零。click
、flick
和类似操作将重试一段时间,直到它们产生成功的交互(例如,按钮未禁用)。此功能不是 WebDriver 协议的一部分,而是由库实现的。此超时时间默认为零。我们欢迎以下方面的贡献
请在您的提交中包含测试。启动应用程序的测试应仅依赖于 Windows 操作系统附带的 GUI 应用程序,例如记事本。