webdriver-0.13.0.0: tests/Spec/ElementState.hs
module Spec.ElementState where
import Data.Aeson as A
import Data.String.Interpolate
import Data.Text as T
import Test.Sandwich
import Test.WebDriver.Commands
import TestLib.Contexts.Session
import TestLib.Contexts.StaticServer
import TestLib.Types
tests :: SessionSpec
tests = introduceSession $ describe "Element state" $ before "Open test page" openSimpleTestPage $ do
it "isSelected" $ do
findElem (ByCSS "#checkbox") >>= isSelected >>= (`shouldBe` False)
findElem (ByCSS "#checkbox") >>= click
findElem (ByCSS "#checkbox") >>= isSelected >>= (`shouldBe` True)
findElem (ByCSS "#checkbox") >>= click
findElem (ByCSS "#checkbox") >>= isSelected >>= (`shouldBe` False)
it "attr" $ do
findElem (ByTag "label") >>= (`attr` "id") >>= (`shouldBe` (Just "numberLabel"))
it "prop" $ do
findElem (ByCSS "#checkbox") >>= isSelected >>= (`shouldBe` False)
findElem (ByCSS "#checkbox") >>= (`prop` "checked") >>= (`shouldBe` (Just (A.Bool False)))
findElem (ByCSS "#checkbox") >>= click
findElem (ByCSS "#checkbox") >>= isSelected >>= (`shouldBe` True)
findElem (ByCSS "#checkbox") >>= (`prop` "checked") >>= (`shouldBe` (Just (A.Bool True)))
it "cssProp" $ do
Just color <- findElem (ByCSS "#input-red") >>= (`cssProp` "color")
-- Depending on browser, this can produce a couple different values
["rgb(255,0,0)", "rgba(255,0,0,1)"] `shouldContain` [T.filter (/= ' ') color]
it "getText" $ do
findElem (ByCSS "#click-here-link") >>= getText >>= (`shouldBe` "Click here")
it "tagName" $ do
findElem (ByCSS "#incrementButton") >>= tagName >>= (`shouldBe` "button")
findElem (ByCSS "#numberLabel") >>= tagName >>= (`shouldBe` "label")
findElem (ByCSS "a") >>= tagName >>= (`shouldBe` "a")
it "elemRect" $ do
rect1 <- findElem (ByCSS "#input1") >>= elemRect
info [i|rect1: #{rect1}|]
rect2 <- findElem (ByCSS "#input2") >>= elemRect
info [i|rect2: #{rect2}|]
rectX rect1 `shouldBe` rectX rect2
(rectY rect1 < rectY rect2) `shouldBe` True
it "isEnabled" $ do
findElem (ByCSS "#input1") >>= isEnabled >>= (`shouldBe` True)
findElem (ByCSS "#input-disabled") >>= isEnabled >>= (`shouldBe` False)