Skip to content

This library allows you to work with selenium webdriver on server-side swift

License

Notifications You must be signed in to change notification settings

GetAutomaApp/SwiftWebDriver

This branch is 113 commits ahead of ashi-psn/SwiftWebDriver:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Apr 13, 2025
339706e · Apr 13, 2025
Apr 13, 2025
Apr 9, 2025
Apr 8, 2025
Apr 13, 2025
Mar 20, 2025
Apr 10, 2025
Apr 13, 2025
Apr 13, 2025
Apr 9, 2025
Apr 8, 2025
Apr 9, 2025
Jun 12, 2022
Apr 2, 2025
Apr 9, 2025
Apr 1, 2025
Mar 24, 2025
Apr 13, 2025

Repository files navigation

[!NOTE] This codebase is a fork made from this REPO. The majority of the code was written by @ashi-psn. This repo just modernizes it & adapts it for our organizations usecases.

SwiftWebDriver

Docker Image CI Release Swift Compatibility Platform Compatibility

This library allows you to work with selenium webdriver on server-side swift

Getting Started

Adding the dependency

Add the following entry in your Package.swift to start using SwiftWebDriver:

.package(url: "https://github.com/GetAutomaApp/SwiftWebDriver.git", branch: "master")

and add dependency to your target:

.target(name: "MyApp", dependencies: [.product(name: "SwiftWebDriver", package: "SwiftWebDriver")]),

Testing in Docker

docker-compose build // build image
docker-compose up -d // Run httpd and chromedriver
docker-compose run test // Run Tests in Docker

Testing on Host Machine

docker compose up selenium httpd -d
  1. Run tests via test runner / swift test

Example

Start and Stop

let chromeOption = ChromeOptions(
  args: [
    Args(.headless),
  ]
)

// create webdriver object
// default webdriver url is http://localhost:4444
// if you need to change webdriver url, use `driverURL` parameter.
let driver = WebDriver(
  driver: ChromeDriver(
    browserObject: chromeOption
    )
)


//create session
let sessionId = try await driver.start()

//stop session
try await driver.stop()

Find Elements

Use Element Selector

// find element by class name
let classText = try await driver.findElement(.css(.class("classElement")))

// find element by id name
let idElement = try await driver.findElement(.css(.id("idElement")))

// find element by name parameter
let nameElement = try await driver.findElement(.css(.name("nameElement")))

Use XPath

let element = try await driver.findElement(.xpath("//*[@id=\"inParentSingleElement\"]"))

Use Link Text

let element = try await driver.findElement(.linkText("go to next page"))

Use PartialLink

let element = try await driver.findElement(.partialLinkText("go"))

Use Find Elements Method

Both Selectors support the findElements Method. findElements method return Elements, such as Array.


Get Element Value

Element.text method return value.

let text = try await driver
  .findElement(.css(.id("myValue")))
  .text()

Element Chain Method

Elements and Elements can use chain methods to narrow down the elements

let element = try await driver
  .findElement(.css(.id("parent"))
  .findElement(.css(.id("child")))
  .text()

About

This library allows you to work with selenium webdriver on server-side swift

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 96.2%
  • HTML 2.8%
  • Dockerfile 1.0%