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

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

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

import cats.effect.Sync
import cats.implicits._
import org.openqa.selenium._

import scala.collection.JavaConverters._

trait Element[F[_]] {

  val _webElement: WebElement

  def clear(): F[Unit]

  def click(): F[Unit]

  def findElement(by: By): F[scala.Option[Element[F]]]

  def findElements(by: By): F[List[Element[F]]]

  def attribute(name: String): F[String]

  def css(propertyName: String): F[String]

  def location: F[Point]

  def rectangle: F[Rectangle]

  def size: F[Dimension]

  def tagName: F[String]

  def text: F[String]

  def displayed: F[Boolean]

  def enabled: F[Boolean]

  def selected: F[Boolean]

  def sendKeys(keys: String): F[Unit]

  def submit(): F[Unit]
}

object Element {

  def apply[F[_]: Sync](webElement: WebElement): Element[F] = {
    impl.mkElement(webElement)
  }

  object impl {

    def mkElement[F[_]: Sync](webElement: WebElement): Element[F] = new Element[F] {

      val _webElement: WebElement = webElement

      def clear(): F[Unit] =
        Sync[F].delay(webElement.clear())

      def click(): F[Unit] =
        Sync[F].delay(webElement.click())

      def findElement(by: By): F[scala.Option[Element[F]]] =
        Sync[F].delay(
          Either.catchOnly[NoSuchElementException](Element[F](webElement.findElement(by))).toOption
        )

      def findElements(by: By): F[List[Element[F]]] =
        Sync[F].delay(
          webElement.findElements(by).asScala.toList.map(Element[F])
        )

      def attribute(name: String): F[String] =
        Sync[F].delay(webElement.getAttribute(name))

      def css(propertyName: String): F[String] =
        Sync[F].delay(webElement.getCssValue(propertyName))

      def location: F[Point] =
        Sync[F].delay(webElement.getLocation)

      def rectangle: F[Rectangle] =
        Sync[F].delay(webElement.getRect)

      def size: F[Dimension] =
        Sync[F].delay(webElement.getSize)

      def tagName: F[String] =
        Sync[F].delay(webElement.getTagName)

      def text: F[String] =
        Sync[F].delay(webElement.getText)

      def displayed: F[Boolean] =
        Sync[F].delay(webElement.isDisplayed)

      def enabled: F[Boolean] =
        Sync[F].delay(webElement.isEnabled)

      def selected: F[Boolean] =
        Sync[F].delay(webElement.isSelected)

      def sendKeys(keys: String): F[Unit] =
        Sync[F].delay(webElement.sendKeys(keys))

      def submit(): F[Unit] =
        Sync[F].delay(webElement.submit())

    }

  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy