Stability | experimental |
---|---|
Maintainer | Charles Strahan <charles.c.strahan@gmail.com> |
Safe Haskell | None |
- class (Driver sess, MonadIO m, MonadBase IO m, MonadBaseControl IO m) => Query q sess m where
- find :: q sess m -> HappybaraT sess m (Maybe (Node sess))
- findOrFail :: q sess m -> HappybaraT sess m (Node sess)
- findAll :: q sess m -> HappybaraT sess m [Node sess]
- within :: (Query q sess m, Driver sess, Functor m, Monad m) => q sess m -> HappybaraT sess m a -> HappybaraT sess m a
- withinAll :: (Query q sess m, Driver sess, Functor m, Monad m) => q sess m -> HappybaraT sess m a -> HappybaraT sess m [a]
- link :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- button :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- linkOrButton :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- fieldset :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- field :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- fillableField :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- select :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- checkbox :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- radioButton :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- fileField :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- optgroup :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- option :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- table :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- definitionDescription :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess m
- href :: (Driver sess, MonadBase IO m) => Text -> Node sess -> HappybaraT sess m Bool
- checked :: (Driver sess, MonadBase IO m) => Bool -> Node sess -> HappybaraT sess m Bool
- unchecked :: (Driver sess, MonadBase IO m) => Bool -> Node sess -> HappybaraT sess m Bool
- disabled :: (Driver sess, MonadBase IO m) => Bool -> Node sess -> HappybaraT sess m Bool
- selected :: (Driver sess, MonadBase IO m) => NodeValue -> Node sess -> HappybaraT sess m Bool
- options :: (Driver sess, MonadBase IO m) => [Text] -> Node sess -> HappybaraT sess m Bool
- elemType :: (Driver sess, MonadBase IO m) => Text -> Node sess -> HappybaraT sess m Bool
- data SimpleQuery sess m = SimpleQuery {
- sqXPath :: Bool -> Text
- sqPredicates :: [Node sess -> HappybaraT sess m Bool]
- sqDescription :: Text
Query Interface
class (Driver sess, MonadIO m, MonadBase IO m, MonadBaseControl IO m) => Query q sess m whereSource
This class is the backbone of Happybara's DOM querying DSL.
While Happybara includes support for a number of common queries, you're more than
welcome to implement your own Query
instances, thus extending the DSL.
Queries are scoped to the current node as given by getCurrentNode
, and
a new scope can be specified via within
.
Note that the behavior of a query is dependent on the current Exactness
setting:
-
Exact
- Find elements that match exactly. -
PreferExact
- First try to find exact matches; if that fails, fall back to inexact matches. -
Inexact
- Find all elements that partially match - e.g. the given string is infix of (but not necessarily equal to) whatever property (id, attribute, etc) is being queried over.
When locating a single item, the failure mode depends on the current SingleMatchStrategy
setting:
-
MatchFirst
- If no elements matched, throwElementNotFoundException
; otherwise, return the first matching element. -
MatchOne
- If no elements matched, throwElementNotFoundException
; if more than element matches, throwAmbiguousElementException
.
To set the current Exactness
, use setExactness
.
To set the current SingleMatchStrategy
, use setSingleMatchStrategy
.
find :: q sess m -> HappybaraT sess m (Maybe (Node sess))Source
findOrFail :: q sess m -> HappybaraT sess m (Node sess)Source
findAll :: q sess m -> HappybaraT sess m [Node sess]Source
(Driver sess, MonadIO m, MonadBase IO m, MonadBaseControl IO m) => Query SimpleQuery sess m |
Scoping
within :: (Query q sess m, Driver sess, Functor m, Monad m) => q sess m -> HappybaraT sess m a -> HappybaraT sess m aSource
Set the current element scope to the element given by the query.
withinAll :: (Query q sess m, Driver sess, Functor m, Monad m) => q sess m -> HappybaraT sess m a -> HappybaraT sess m [a]Source
For each element given by the query, set the current scope accordingly and invoke the monadic action, yielding each result.
Basic Queries
Happybara includes a number of queries for common cases where you want to find an element by value, title, id, alt-text, etc. These queries can be further filtered by the predicates listed below.
For example, this query will return all enabled buttons matching "Submit Application":
findAll
$button
"Submit Application" [disabled
False ]
link :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
button :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
linkOrButton :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
fieldset :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
field :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
fillableField :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
select :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
checkbox :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
radioButton :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
fileField :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
optgroup :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
option :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
table :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
definitionDescription :: Driver sess => Text -> [Node sess -> HappybaraT sess m Bool] -> SimpleQuery sess mSource
Predicates
Types
data SimpleQuery sess m Source
SimpleQuery | |
|
(Driver sess, MonadIO m, MonadBase IO m, MonadBaseControl IO m) => Query SimpleQuery sess m |