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

 
 

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

Releases

No releases published

Packages

No packages published

Languages

  • Swift 95.9%
  • HTML 3.0%
  • Dockerfile 1.1%