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

teststate.domzipper.selenium.FastDomZipperSeleniumF.scala Maven / Gradle / Ivy

The newest version!
package teststate.domzipper.selenium

import org.openqa.selenium.{WebDriver, WebElement}
import teststate.domzipper.jsoup.DomZipperJsoupF
import teststate.domzipper.jsoup.DomZipperJsoupF.{Dom => JDom}
import teststate.domzipper.{DomZippersFastAndSlow, ErrorHandler, HtmlScrub}

object FastDomZipperSeleniumF {

  type Dom = WebElement

  type FastDomZipperSeleniumF[F[_]] = DomZippersFastAndSlow.AtHome[F, Dom]

  def apply[F[_]: ErrorHandler](fast: DomZipperJsoupF[F, JDom], slow: DomZipperSeleniumF[F, () => Dom]): FastDomZipperSeleniumF[F] =
    DomZippersFastAndSlow[F, DomZipperJsoupF, JDom, JDom, DomZipperSeleniumF, () => Dom, Dom](fast, slow.map(_()))

  final class Constructors[F[_]](implicit F: ErrorHandler[F]) {
    private val DomZipperSelenium = new DomZipperSeleniumF.Constructors[F]()
    private val DomZipperJsoup = new DomZipperJsoupF.Constructors[F]()

    def html(driver: WebDriver)(implicit scrub: HtmlScrub): FastDomZipperSeleniumF[F] = {
      val s = DomZipperSelenium.html(driver)
      val f = DomZipperJsoup.parseHtml(s.outerHTML)
      FastDomZipperSeleniumF(f, s)
    }

    def body(driver: WebDriver)(implicit scrub: HtmlScrub): FastDomZipperSeleniumF[F] = {
      val s = DomZipperSelenium.body(driver)
      val f = DomZipperJsoup.parseBody(s.outerHTML)
      FastDomZipperSeleniumF(f, s)
    }

    def failBy[G[_]: ErrorHandler]: Constructors[G]   = new Constructors
    def failToOption: Constructors[Option           ] = failBy(ErrorHandler.ReturnOption)
    def failToEither: Constructors[Either[String, *]] = failBy(ErrorHandler.ReturnEither)

    type DomCollection [      C[_], A] = DomZippersFastAndSlow.DomCollection[F, C, Dom, A]
    type DomCollectionF[G[_], C[_], A] = DomZippersFastAndSlow.DomCollection[G, C, Dom, A]
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy