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

ashi-psn/SwiftWebDriver

Repository files navigation

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/ashi-psn/SwiftWebDriver.git", from: "0.1.1")

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

Example

Start snd 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 ParticalLink

let element = try await driver.findElement(.particalLinkText("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()