All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.pierrenodet.fs2.selenium.Locator.scala Maven / Gradle / Ivy

The newest version!
package com.github.pierrenodet.fs2.selenium

import cats.effect.{Resource, Sync}
import org.openqa.selenium.WebDriver.TargetLocator

trait Locator[F[_]] {

  def activeElement(): Element[F]

  def alert(): Alert[F]

  def defaultContent(): Resource[F, Driver[F]]

  def frame(index: Int): Resource[F, Driver[F]]

  def frame(name: String): Resource[F, Driver[F]]

  def frame(element: Element[F]): Resource[F, Driver[F]]

  def parent(): Resource[F, Driver[F]]

  def window(name: String): Resource[F, Driver[F]]

}

object Locator {

  def apply[F[_]: Sync](targetLocator: TargetLocator): Locator[F] = impl.mkLocator(targetLocator)

  object impl {

    def mkLocator[F[_]: Sync](targetLocator: TargetLocator): Locator[F] = new Locator[F] {

      def activeElement(): Element[F] = Element[F](targetLocator.activeElement())

      def alert(): Alert[F] = Alert[F](targetLocator.alert())

      def defaultContent(): Resource[F, Driver[F]] =
        Driver[F](() => Sync[F].delay(targetLocator.defaultContent()))

      def frame(index: Int): Resource[F, Driver[F]] =
        Driver[F](() => Sync[F].delay(targetLocator.frame(index)))

      def frame(name: String): Resource[F, Driver[F]] =
        Driver[F](() => Sync[F].delay(targetLocator.frame(name)))

      def frame(element: Element[F]): Resource[F, Driver[F]] =
        Driver[F](() => Sync[F].delay(targetLocator.frame(element._webElement)))

      def parent(): Resource[F, Driver[F]] =
        Driver[F](() => Sync[F].delay(targetLocator.parentFrame()))

      def window(name: String): Resource[F, Driver[F]] =
        Driver[F](() => Sync[F].delay(targetLocator.window(name)))
    }

  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy